Описание
# InfiniteUse
Make any item infinite with one command. Totems become unlimited. Blocks place forever. Tools never break.
## Features
A single command turns the item in your main hand into an **infinite** item:
- **Stack count never decreases** — eat food, place blocks, throw splash potions, shoot arrows, fire ender pearls, drink potions, use buckets... the stack never goes down.
- **Durability never decreases** — swords, pickaxes, shears, bows, fishing rods, crossbows, elytra... the bar stays full.
- **Totems of Undying** — survive death as many times as you want from a single totem.
- **End Crystals**, **Boats**, **Eggs**, **Snowballs**, **Splash Potions**, **all subclass items** — covered via a unified `ItemStack` dispatch hook.
The marker is stored as an NBT tag (1.16.5–1.20.4) or as a custom `DataComponent` (1.20.5+), so it persists across save/load and works on dedicated servers.
### Move duplication is fixed
Earlier naive implementations duplicate items when you shift-click them in inventories (the source stack doesn't decrement, but the destination still receives the items). InfiniteUse uses a **thread-local consume context**: cancellation only triggers when the stack is actually being *consumed* (use / place / eat / totem trigger), not during inventory transfers. Move freely without duplication.
## Commands
Requires OP permissions (level 2).
| Command | Description |
|--------|-------------|
| `/infiniteuse` or `/iu` | Toggle InfiniteUse on the held item |
| `/iu on` | Mark the held item as infinite |
| `/iu off` | Remove the mark |
| `/iu toggle` | Same as no argument |
| `/iu status` | Show current state of the held item |
## Requirements
- Fabric Loader
- Fabric API
Each jar targets one Minecraft version. **Use the jar that exactly matches your Minecraft version.**
### Jar / Minecraft compatibility table
| Jar file | Compatible Minecraft version |
|---|---|
| `infiniteuse-mc1.16.5-1.0.0.jar` | 1.16.5 |
| `infiniteuse-mc1.17.1-1.0.0.jar` | 1.17.1 |
| `infiniteuse-mc1.18.2-1.0.0.jar` | 1.18.2 |
| `infiniteuse-mc1.19.4-1.0.0.jar` | 1.19.4 |
| `infiniteuse-mc1.20.1-1.0.0.jar` | 1.20.1 |
| `infiniteuse-mc1.20.4-1.0.0.jar` | 1.20.2 / 1.20.3 / 1.20.4 |
| `infiniteuse-mc1.20.6-1.0.0.jar` | 1.20.5 / 1.20.6 |
| `infiniteuse-mc1.21.1-1.0.0.jar` | 1.21 / 1.21.1 |
| `infiniteuse-mc1.21.2-1.0.0.jar` | 1.21.2 |
| `infiniteuse-mc1.21.3-1.0.0.jar` | 1.21.3 |
| `infiniteuse-mc1.21.4-1.0.0.jar` | 1.21.4 |
| `infiniteuse-mc1.21.5-1.0.0.jar` | 1.21.5 |
| `infiniteuse-mc1.21.6-1.0.0.jar` | 1.21.6 |
| `infiniteuse-mc1.21.7-1.0.0.jar` | 1.21.7 |
| `infiniteuse-mc1.21.8-1.0.0.jar` | 1.21.8 |
| `infiniteuse-mc1.21.9-1.0.0.jar` | 1.21.9 |
| `infiniteuse-mc1.21.10-1.0.0.jar` | 1.21.10 |
| `infiniteuse-mc1.21.11-1.0.0.jar` | 1.21.11 |
Versions not listed (1.16.0-1.16.4, 1.17.0, 1.18.0/1.18.1, 1.19.0-1.19.3, 1.20.0, etc.) are **not supported** — Minecraft's APIs differ enough between point releases that a mismatched jar will fail to load or crash.
## How it works
A Mixin on `ItemStack#decrement` and `ItemStack#setDamage` cancels the operation only when:
1. The stack carries the InfiniteUse marker, AND
2. We are inside a "consume" path (`Item#use`, `useOnBlock`, `finishUsing`, `onStoppedUsing`, or `LivingEntity#tryUseDeathProtector` / `tryUseTotem`).
Inventory operations (drag, shift-click, hopper transfer, drop) take place outside this context, so counts decrement normally — no duplication.
## Links
**YouTube:** [MC clip](https://youtube.com/channel/UCGrw0wd3fF-l-m3wfCLbFKw)
Subscribe for updates and tutorials!
---
# 日本語
コマンド一発でメインハンドのアイテムを **無限化** するFabric MOD。
## 特徴
- **スタック数が減らない** — 食べる・置く・スプラッシュポーション投擲・矢発射・エンダーパール・ポーション飲み・バケツ使用…全部減りません
- **耐久値が減らない** — 剣・ピッケル・ハサミ・弓・釣竿・クロスボウ・エリトラ…バーは常に満タン
- **トーテム・オブ・アンダイング無限** — 1個のトーテムで何度でも蘇生
- **エンドクリスタル / ボート / 卵 / 雪玉 / スプラッシュポーション / その他サブクラス系アイテム** — `ItemStack` の統一エントリで全部カバー
マーカーは NBT タグ(1.16.5〜1.20.4)または カスタム DataComponent(1.20.5以降)で保存。セーブ&ロードを跨いでも維持され、専用サーバでも動作します。
### アイテム移動時の複製を解決済み
素朴な実装だとシフトクリック移動時に「移動先には入る・移動元は減らない」で複製になります。本MODは **スレッドローカルの消費コンテキスト** を使い、実際にアイテムを *消費* する経路(使用/設置/食べる/トーテム発動)でのみキャンセルが発動します。インベントリ移動・ホッパー輸送・ドロップは通常通りに進むので複製しません。
## コマンド
OP権限(レベル2)が必要。
| コマンド | 動作 |
|---|---|
| `/infiniteuse` または `/iu` | メインハンドのアイテムを無限化トグル |
| `/iu on` | 無限化をON |
| `/iu off` | 無限化をOFF |
| `/iu toggle` | 引数なしと同じ |
| `/iu status` | 現在の状態を表示 |
## 対応バージョン
各 jar は **1 つの Minecraft バージョン専用** です。お使いの Minecraft バージョンに合った jar を選んでください。
### jar と対応 Minecraft バージョン対応表
| jar ファイル | 対応 Minecraft バージョン |
|---|---|
| `infiniteuse-mc1.16.5-1.0.0.jar` | 1.16.5 |
| `infiniteuse-mc1.17.1-1.0.0.jar` | 1.17.1 |
| `infiniteuse-mc1.18.2-1.0.0.jar` | 1.18.2 |
| `infiniteuse-mc1.19.4-1.0.0.jar` | 1.19.4 |
| `infiniteuse-mc1.20.1-1.0.0.jar` | 1.20.1 |
| `infiniteuse-mc1.20.4-1.0.0.jar` | 1.20.2 / 1.20.3 / 1.20.4 |
| `infiniteuse-mc1.20.6-1.0.0.jar` | 1.20.5 / 1.20.6 |
| `infiniteuse-mc1.21.1-1.0.0.jar` | 1.21 / 1.21.1 |
| `infiniteuse-mc1.21.2-1.0.0.jar` | 1.21.2 |
| `infiniteuse-mc1.21.3-1.0.0.jar` | 1.21.3 |
| `infiniteuse-mc1.21.4-1.0.0.jar` | 1.21.4 |
| `infiniteuse-mc1.21.5-1.0.0.jar` | 1.21.5 |
| `infiniteuse-mc1.21.6-1.0.0.jar` | 1.21.6 |
| `infiniteuse-mc1.21.7-1.0.0.jar` | 1.21.7 |
| `infiniteuse-mc1.21.8-1.0.0.jar` | 1.21.8 |
| `infiniteuse-mc1.21.9-1.0.0.jar` | 1.21.9 |
| `infiniteuse-mc1.21.10-1.0.0.jar` | 1.21.10 |
| `infiniteuse-mc1.21.11-1.0.0.jar` | 1.21.11 |
上記に載っていないバージョン(1.16.0〜1.16.4、1.17.0、1.18.0/1.18.1、1.19.0〜1.19.3、1.20.0 など)は **非対応** です。Minecraft の API がポイントリリース間で十分に変化するため、合わない jar はロードに失敗するかクラッシュします。
## 仕組み
`ItemStack#decrement` と `ItemStack#setDamage` をMixinで横取りし、以下の条件を**両方**満たす場合にだけキャンセルします:
1. 対象スタックに InfiniteUse マーカーが付いている
2. 「消費パス」内(`Item#use` / `useOnBlock` / `finishUsing` / `onStoppedUsing` / `LivingEntity#tryUseDeathProtector` ・ `tryUseTotem`)
インベントリ操作(ドラッグ・シフトクリック・ホッパー輸送・ドロップ)はこの条件外なので普通にスタックが減り、複製しません。
## YouTube
**チャンネル:** [MCクリップ](https://youtube.com/channel/UCGrw0wd3fF-l-m3wfCLbFKw)
チャンネル登録よろしく!