Description
π²EcoTale RandomReward
Daily Mystery Board Β· Weighted Loot Β· Admin GUI
Engaging daily reward mini-game for Hytale servers.
Overview
EcoTale RandomReward adds a daily mystery board to your server β a grid of hidden tiles that players can pick once per day for a random prize. Rewards are drawn from a weighted loot pool with 5 rarity tiers. Everything is fully configurable through JSON or the in-game Admin GUI β no server restarts required.
Features
Mystery Tile Board
- Configurable grid size (up to 6Γ6)
- One pick per day β players choose a mystery tile
- Animated reveal with rarity-colored feedback
- Auto-opens GUI on first daily login
- Minimum online time requirement (anti-abuse)
Weighted Loot System
- 4 reward types: Coins, XP, Items, Mixed
- Probability weights per entry (higher = more frequent)
- 5 rarity tiers: Common, Uncommon, Rare, Epic, Legendary
- Per-rarity color coding in the UI
- Mixed rewards combine coins + XP + items
In-Game Admin GUI
- Full reward pool editor β add, edit, delete entries
- Direct text input for name, chance, coins, XP values
- Type & rarity cycling buttons
- Item selection via searchable dropdown (all server items)
- Grid size, language, debug mode settings
- Save & reload config without leaving the game
Soft Dependencies
- EcotaleAPI β coin deposits (optional)
- RPG Leveling β XP integration (optional)
- Endless Leveling β XP integration (optional)
- LuckPerms β permission resolution (optional)
- Falls back gracefully when any dependency is missing
Other
- Multi-language β English, Russian, German, Spanish, French, Portuguese built-in
- Player stats β total claims, last reward, claimed-today status
- JSON storage β per-player files with auto-save
- Permission system β 3-tier resolution: LuckPerms β HyperPerms β permissions.json fallback
Project Structure
EcoTaleRandomReward/
βββ src/main/java/com/crystalrealm/ecotalerandomreward/
β βββ EcoTaleRandomRewardPlugin.java β Plugin lifecycle & event registration
β βββ commands/
β β βββ RandomRewardCommandCollection.java β /randomreward command tree
β βββ config/
β β βββ ConfigManager.java β JSON config loading/saving
β β βββ RandomRewardConfig.java β Configuration POJO
β βββ gui/
β β βββ AdminRewardGui.java β Admin panel (reward editor + settings)
β β βββ DailyRewardGui.java β Player-facing mystery board
β β βββ PageOpenHelper.java β ECS page opener utility
β β βββ ReflectiveCodecBuilder.java β UI codec builder via reflection
β βββ lang/
β β βββ LangManager.java β i18n with per-player locale
β βββ model/
β β βββ PlayerRewardData.java β Per-player persistent data
β βββ provider/
β β βββ EconomyBridge.java β Reflection-based economy adapter
β β βββ leveling/
β β βββ LevelProvider.java β Leveling provider interface
β β βββ LevelBridge.java β Auto-detecting provider router
β β βββ RPGLevelingProvider.java β Zuxaw RPG Leveling adapter
β β βββ EndlessLevelingProvider.java β Airijko EndlessLeveling adapter
β βββ reward/
β β βββ RewardService.java β Random selection & reward issuance
β βββ storage/
β β βββ JsonRewardStorage.java β Per-player JSON persistence
β β βββ RewardStorage.java β Storage interface
β βββ util/
β βββ MessageUtil.java β Chat message utilities
β βββ MiniMessageParser.java β MiniMessage formatting
β βββ PermissionHelper.java β 3-tier permission resolution
β βββ PluginLogger.java β Structured logging
βββ src/main/resources/
β βββ default-config.json β Default configuration (13 rewards)
β βββ manifest.json β Hytale plugin manifest
β βββ lang/
β βββ en.json β English
β βββ ru.json β Russian
β βββ de.json β German
β βββ es.json β Spanish
β βββ fr.json β French
β βββ pt_br.json β Portuguese (Brazil)
βββ src/stubs/java/ β Hytale API compile-time stubs
Commands
| Command | Permission | Description |
|---|---|---|
/randomreward |
ecotalerandomreward.use |
Open the mystery board GUI |
/randomreward open |
ecotalerandomreward.use |
Open the mystery board GUI |
/randomreward pick |
ecotalerandomreward.use |
Pick a random tile (CLI) |
/randomreward info |
ecotalerandomreward.use |
View your reward stats |
/randomreward admin |
ecotalerandomreward.admin |
Open the admin GUI |
/randomreward reload |
ecotalerandomreward.admin |
Reload configuration |
/randomreward langen |
ecotalerandomreward.use |
Switch to English |
/randomreward langru |
ecotalerandomreward.use |
Switch to Russian |
/randomreward help |
ecotalerandomreward.use |
Command reference |
Permissions
| Permission | Description | Default |
|---|---|---|
ecotalerandomreward.use |
Board access, pick, info, language | All players |
ecotalerandomreward.admin |
Admin GUI, reload | OP |
Dependencies
| Plugin | Type | Purpose |
|---|---|---|
| Ecotale β₯1.0.0 | Required | Core server plugin |
| EcotaleAPI | Optional | Economy integration (coin rewards) |
| RPG Leveling | Optional | XP reward integration |
| Endless Leveling | Optional | XP reward integration |
| LuckPerms | Optional | Group-based permission resolution |
All optional APIs are accessed via reflection β the plugin runs without them.
Installation
- Copy
EcoTaleRandomReward-1.0.0.jarto your server'sMods/folder. - Start the server β the default config auto-generates with 13 sample rewards.
- Use
/randomreward adminto manage rewards in-game, or edit the JSON directly. /randomreward reloadto apply config changes.
Configuration
The config file is generated automatically on first run.
General Settings
{
"General": {
"DebugMode": false,
"Language": "en",
"MessagePrefix": "<gold>[DailyReward]</gold> ",
"AutoSaveIntervalMinutes": 5,
"EconomyProvider": "ecotale",
"LevelProvider": "",
"AutoOpenGuiOnJoin": true,
"GridRows": 5,
"GridColumns": 5,
"MinOnlineMinutes": 0,
"GuiTitle": "DAILY REWARD"
}
}
| Field | Description |
|---|---|
Language |
Default language (en, ru, de, es, fr, pt_br) |
EconomyProvider |
Economy API to use (ecotale or blank for auto-detect) |
LevelProvider |
XP provider (rpgleveling, endlessleveling, or blank for auto-detect) |
AutoOpenGuiOnJoin |
Open the board automatically on first daily login |
GridRows / GridColumns |
Board size (1β6 each) |
MinOnlineMinutes |
Minimum time online before claiming |
Reward Entry Format
{
"Id": "coins_jackpot",
"DisplayName": "Jackpot!",
"Type": "coins",
"Coins": 2000.0,
"Xp": 0,
"Item": "",
"Weight": 2,
"Rarity": "legendary",
"IconColor": "#ffaa00"
}
| Field | Description |
|---|---|
Type |
Reward type: coins, xp, item, mixed |
Coins |
Coin amount (for coins and mixed types) |
Xp |
XP amount (for xp and mixed types) |
Item |
Item ID in namespace:item:count format (for item and mixed types) |
Weight |
Probability weight β higher = more likely to be picked |
Rarity |
common, uncommon, rare, epic, legendary |
IconColor |
Hex color for the tile display |
Item Format
Items use Hytale's internal identifiers:
hytale:weapon_sword_wood:1
hytale:tool_pickaxe_iron:1
hytale:armor_bronze_head:1
LuckPerms Integration
The plugin checks permissions in order: LuckPerms API β HyperPerms β permissions.json fallback.
Example setup:
/lp group default permission set ecotalerandomreward.use true
/lp group admin permission set ecotalerandomreward.admin true
