Compatibility
Minecraft: Java Edition
Platforms
Links
Tags
Creators
Details
DodepUpgrader — gamble your items on a wheel of fortune
A player stakes any items from their inventory, picks what to turn them into, and spins the wheel. Land in the golden sector — take the prize. Miss — the stake burns.
The odds are not invented: they come from the value of the stake and the target, and the plugin derives every price itself from vanilla recipes. Three diamonds against a netherite sword — 22.7%; the same three against a boat — the 90% ceiling. The more you stake, the better your chances.
The interface is full-screen, drawn by resource-pack shaders: it fits any resolution, FOV and GUI scale, and the cursor is drawn by the client itself, with no server lag.
The only thing you need alongside it is PacketEvents. The menu, the pixel font and the resource pack are built and served by the plugin itself. Server: Paper 1.21.11 and compatible forks (Purpur, Leaf; Folia untested). Client: 1.21.11.
Features
- Stake anything from the inventory. Not a list in a config — whatever the player
actually carries: diamonds, logs, enchanted armour. The amount is picked with
−and+, from one item up to everything they hold. - The target catalog is laid out like the creative inventory. Tabs by category, pages, mouse-wheel paging; hovering shows the name (and the price, if you enabled it).
- Honest odds.
chance = factor × (stake value ÷ target value), clamped betweenminandmax. The golden arc always covers exactly that share of the circle. - A price for everything. A built-in raw-material table, vanilla recipes and a family-based guess for whatever cannot be crafted. Every item of the catalog is written into the price file — look any of them up, change any of them.
- One switch for the economy. Show the numbers to players, or leave only the percentage.
- Everything visible is configurable. All messages, with hex colours and MiniMessage; a light or dark menu theme; cursor size and speed.
- The resource pack builds itself. Shaders and the pixel font are packed by the plugin and delivered one of four ways: its own HTTP server, Nexo, a path of your choosing, or nothing at all if you prefer to hand it out yourself.
Installation
- Install PacketEvents.
- Drop
DodepUpgrader-1.0.0.jarintoplugins/and restart the server. - On the first start the plugin creates
plugins/DodepUpgrader/config.yml,prices.ymland the resource pack inplugins/DodepUpgrader/pack/. The whole price list is computed and written for you. - Pick how the pack reaches players in
resourcepack.mode. The default isselfhost— the plugin serves it over its own HTTP server on port 8099, so that port has to be reachable. /upgradeopens the menu.
The startup log tells you everything went through:
[DodepUpgrader] Прайс: 1388 предметов (от цены алмаза 400.0)
[DodepUpgrader] Ресурспак собран: DodepUpgrader.zip (sha1 fa2a4cecad)
[DodepUpgrader] Пак раздаётся самим плагином: http://your-address:8099/....zip
[DodepUpgrader] Каталог целей: 1387 предметов
Commands and permissions
| Command | What it does | Permission |
|---|---|---|
/upgrade |
open the upgrader | upgrader.use (everyone by default) |
/upgrade <player> |
open it for someone else | upgrader.admin |
/upgrade reload |
reload the config and rebuild prices | upgrader.admin |
/upgrade cursor <player> <x> <y> [click] |
move the cursor and click — console-side debugging | upgrader.admin |
Command aliases: /upgrader, /apgreid.
config.yml
chance:
# chance = factor × (stake value ÷ target value), clamped between min and max.
# factor 0.9 means even an equal trade is never a sure thing.
factor: 0.9
min: 0.001
max: 0.9
# Fee per spin on top of the stake itself (0 — free)
price: 0
economy:
# How the fee is taken: vault | playerpoints | none. No economy — spins are free.
type: none
currency-forms: ["монета", "монеты", "монет"]
targets:
# on — only what can be obtained in survival (no spawn eggs and the rest of the
# creative-only stuff); off — the whole item list except `banned`.
survival-only: true
# Never in the catalog, even with survival-only: false.
# An asterisk matches anything: "*_spawn_egg" covers every egg at once.
banned:
- bedrock
- barrier
- command_block
- debug_stick
# …
# Not obtainable in survival. Only used when survival-only: true.
creative-only:
- "*_spawn_egg"
- spawner
- trial_spawner
- budding_amethyst
# …
menu:
# light — pale panels, dark — dark ones
theme: light
text: blossom
# Hide other plugins' actionbar messages and the scoreboard while the menu is open
hide-actionbar: true
hide-sidebar: true
# The player is invulnerable and in Adventure mode while the menu is open
invulnerable: true
adventure-mode: true
sounds: true
cursor:
# Degrees of mouse rotation from the centre to the screen edge. Less — faster cursor.
yaw-range: 55
# Cursor size in pixels of the virtual 1920x1080 screen
size: 30
messages:
prefix: ""
cant-open: "<#C54A31>Сейчас нельзя открыть меню."
wrong-version: "<#C54A31>Меню работает только на клиенте 1.21.11."
no-player: "<#C54A31>Игрок не найден."
no-permission: "<#C54A31>Недостаточно прав."
reloaded: "<#6FAE34>Апгрейдер перезагружен."
The bundled messages are Russian — replace them with your own wording, the keys are what matters.
prices.yml
Prices live in their own file and it works in two modes.
Derived from the price of a diamond (default)
# Whether players see the numbers. Off — they only see the chance.
show-prices: false
diamond:
enabled: true
# What a diamond is worth
price: 400
# Value coefficient: higher — everything derived from the diamond gets pricier
factor: 1.0
# Crafting markup: 1.0 — an item costs exactly its ingredients, 1.2 — 20% more
craft-markup: 1.0
# Price for whatever could not be computed
default: 10
items:
diamond: 400.0
iron_ingot: 40.0
netherite_ingot: 3960.0
# …and so on — the plugin fills this list itself
You name the price of a diamond and the coefficient; the rest follows:
- a built-in table says what raw materials cost in diamonds (an iron ingot — 0.1 of a diamond, netherite scrap — 2.25, a nether star — 15);
- everything craftable is derived from vanilla recipes: the sum of the ingredients divided by the output count, the cheapest of several recipes; loops (ingot → block → ingot) are detected and do not hang the calculation;
- what is neither raw nor craftable is priced by family: ore costs about what it drops, flowers like grass, copper in any oxidation state like copper;
- the finished price list is written back into
items, so every position is visible.
Change diamond.price and the whole list is recomputed. Edits inside items are
overwritten in this mode.
Manual
diamond:
enabled: false
items:
diamond: 1000
netherite_ingot: 25000
Nothing is recomputed or rewritten: prices are exactly what the file says, and anything missing is still derived from recipes based on the prices you gave.
show-prices
false (default) — the player only sees the percentage. true — numbers appear under the
stake and the target, and the catalog tooltips gain a "cost" line.
Resource pack
The interface is drawn by shaders, so players need the server pack. The plugin builds it
into plugins/DodepUpgrader/pack/ and hands it over the way you tell it to:
resourcepack:
# selfhost — the plugin runs its own HTTP server and serves the pack itself;
# nexo — the pack is baked into the Nexo build and served by Nexo;
# path — the plugin writes the zip to a path of your choice, the link comes from url;
# off — the plugin only builds the file, you distribute it.
mode: selfhost
self-host:
host: "" # empty — the server address is used
port: 8099 # must be reachable from outside
file:
path: "/plugins/SomeWebPlugin/packs/upgrader.zip"
url: ""
send-on-join: true
send-delay-ticks: 20
required: false
prompt: "<#90C994>Для меню апгрейдера нужен ресурспак сервера."
The pack lives in its own upgrader namespace, so it coexists with other server packs and
with Nexo.
Known limitations
- The client must be exactly 1.21.11 — on anything else the menu simply will not open
and the player gets the
wrong-versionmessage. - PacketEvents is required: that is how the plugin talks to the client.
- The spin fee (
price) goes through Vault or PlayerPoints. With no economy, or witheconomy.type: none, spins are free and everything else works as usual. - While the menu is open the player is invulnerable and switched to Adventure mode — both
can be turned off in
menu.
По-русски
Игрок ставит любые свои предметы, выбирает, во что хочет их превратить, и крутит колесо. Попал в золотой сектор — забрал цель. Промахнулся — ставка сгорела.
Шанс не выдуман: он считается из стоимости ставки и цели, а стоимость плагин выводит сам по ванильным рецептам. Три алмаза против незеритового меча — 22,7 %, они же против лодки — потолок в 90 %. Чем больше поставил, тем выше шанс.
Интерфейс — полноэкранный, на шейдерах ресурспака: он вписывается в любое разрешение, FOV и GUI-scale, курсор рисует сам клиент, без задержки сервера.
Нужен рядом только PacketEvents — больше ничего. Меню, пиксельный шрифт и ресурспак плагин собирает и раздаёт сам. Сервер — Paper 1.21.11 и совместимые сборки (Purpur, Leaf; Folia не проверялась), клиент — 1.21.11.
Что внутри
- Ставка — что угодно из инвентаря. Не список из конфига, а именно то, что лежит у
игрока: алмазы, брёвна, зачарованная броня. Количество выбирается кнопками
−и+, от одной штуки до того, что есть с собой. - Цель — каталог как креативный инвентарь. Вкладки по разделам, страницы, колесо мыши листает, наведение показывает название (и цену, если вы её включили).
- Честный шанс.
шанс = factor × (стоимость ставки ÷ стоимость цели), зажатый междуminиmax. Золотой сектор на колесе занимает ровно ту долю круга, какой шанс. - Цены на всё. Встроенная таблица сырья + ванильные рецепты + оценка по семье для того, что не крафтится. В файл записывается цена каждого предмета каталога — можно посмотреть и поправить любую.
- Один переключатель на экономику. Цены можно показывать игроку, а можно оставить только процент шанса.
- Всё видимое настраивается. Тексты — в конфиге, с hex-цветами и MiniMessage; оформление меню — светлая или тёмная схема; размер и скорость курсора.
- Ресурспак — сам. Плагин собирает его из шейдеров и пиксельного шрифта и отдаёт одним из четырёх способов: свой HTTP-сервер, Nexo, свой путь или «соберу, раздадите сами».
Установка
- Поставьте PacketEvents.
- Киньте
DodepUpgrader-1.0.0.jarвplugins/и перезапустите сервер. - При первом запуске появятся
config.yml,prices.ymlи собранный пак вplugins/DodepUpgrader/pack/. Прайс на все предметы плагин посчитает и запишет сам. - Выберите в
resourcepack.mode, как пак попадёт к игрокам. По умолчаниюselfhost— плагин раздаёт его своим HTTP-сервером на порту 8099, порт должен быть открыт наружу. /upgrade— открыть апгрейдер.
Команды и права
| Команда | Что делает | Право |
|---|---|---|
/upgrade |
открыть апгрейдер себе | upgrader.use (по умолчанию всем) |
/upgrade <игрок> |
открыть другому игроку | upgrader.admin |
/upgrade reload |
перечитать конфиг и пересобрать цены | upgrader.admin |
/upgrade cursor <игрок> <x> <y> [click] |
подвинуть курсор и нажать: отладка меню с консоли | upgrader.admin |
Псевдонимы команды: /upgrader, /apgreid.
Цены
prices.yml работает в двух режимах. От цены алмаза (по умолчанию): вы называете цену
алмаза и коэффициент его ценности, а дальше плагин считает сам — сырьё из встроенной таблицы
«сколько это стоит в алмазах», всё крафтящееся по ванильным рецептам (сумма ингредиентов ÷
выход, самый дешёвый способ, кольцевые рецепты не зацикливаются), остальное по семье: руда
как её добыча, цветы как трава, медь любой стадии окисления как медь. Готовый прайс
записывается обратно в items, так что цену любой позиции видно и можно поправить — но в
этом режиме правки затираются при пересчёте.
Ручной режим (diamond.enabled: false) ничего не пересчитывает: цены берутся ровно те,
что стоят в файле, а ненайденное выводится по рецептам от указанных вами цен.
show-prices: false — игрок видит только процент шанса; true — ещё и числа под ставкой,
целью и в подсказках каталога.
Цели
targets.survival-only: true — в каталоге только то, что добывается в выживании; всё
креативное прячется списком targets.creative-only. Выключите — будет виден весь список,
кроме targets.banned. В обоих списках работает звёздочка: "*_spawn_egg" — все яйца.
Ограничения
- Клиент строго 1.21.11 — на других версиях меню просто не откроется.
- Нужен PacketEvents: через него плагин говорит с клиентом.
- Плата за прокрутку работает через Vault или PlayerPoints; без экономики прокрутки бесплатные, всё остальное работает как обычно.
- Пока меню открыто, игрок неуязвим и переведён в «Приключение» — обе опции отключаются в
menu.


