Sueta

⚔ EpicBeheading | Player Head Drops ✨ | VIP Drop Rates | 1.

1.1.6

Turn Every Kill Into a Trophy — Custom Drop Rates, VIP Boosts & Leaderboards

·Plugin

EpicBeheading
Player Head Drop Plugin for Minecraft PvP

https://www.spigotmc.org/resources/⚔-epicskullkeeper-⚙️-keep-player-head-lore-data-⚙️.138180/
Support has now been added for saving head block data when placing the block and restoring it when mining it.

EpicBeheading-menu file download
https://github.com/kobayashi-007/ChestCommands-EpicBeheading-menu

Supports dynamic VIP drop rates.

groups:
  vip:
    permission: epicbeheading.vip
    chance: 7.0

  mvp:
    permission: epicbeheading.mvp
    chance: 9.0

  mvpplus:
    permission: epicbeheading.mvpplus
    chance: 12.0
epicbeheading.vip
epicbeheading.mvp
epicbeheading.mvpplus

We will launch an official plugin Wiki in the future, with detailed configuration guides and usage documents to simplify setup and lower the usage threshold for server administrators.

Plugin Overview
EpicBeheading is a Minecraft server plugin that introduces an exciting player-versus-player (PvP) mechanic. When a player kills another player in combat, there is a configurable chance that the victim's player head will drop as a loot item. The plugin enhances the PvP experience by rewarding successful kills with collectible, display-worthy trophies.

New Features
1. Statistics & Leaderboard System
Tracks per-player data across three dimensions, exposed via leaderboards:

  • Total: lifetime, never resets

  • Weekly: ISO week (resets Monday 00:00)

  • Monthly: calendar month (resets 1st 00:00)

Each dimension tracks both kills and heads collected, yielding 6 leaderboards.

Lazy period reset: on week/month turnover, no full-player traversal is performed. Instead, the period ID is checked the next time that player triggers an event (kill or head drop) and resets in place. Even with many offline players, turnover is zero-cost.

2. SQLite Persistence
Statistics are stored in SQLite at plugins/EpicBeheading/playerdata/data.db, replacing the old statistics.yml:

  • WAL mode + synchronous=NORMAL balances concurrency and write throughput

  • Batch upsert in a single transaction — thousands of players flush in milliseconds

  • In-memory cache + dirty-flag async flush: the main-thread death event only updates memory, no synchronous disk IO

  • The driver is bundled in the jar (relocated to com.epicbeheading.sqlite), so no server-side driver install is needed and conflicts with other plugins are avoided

3. PlaceholderAPI Placeholders
Requires PlaceholderAPI. Registered placeholders (prefix %epicbeheading_):

Personal data

| Placeholder                   | Meaning               |
| ----------------------------- | --------------------- |
| `%epicbeheading_kills%`       | Total kills           |
| `%epicbeheading_heads%`       | Total heads collected |
| `%epicbeheading_week_kills%`  | Weekly kills          |
| `%epicbeheading_week_heads%`  | Weekly heads          |
| `%epicbeheading_month_kills%` | Monthly kills         |
| `%epicbeheading_month_heads%` | Monthly heads         |

Personal rank (returns empty text if unranked)

| Placeholder                        | Meaning            |
| ---------------------------------- | ------------------ |
| `%epicbeheading_kills_rank%`       | Total kills rank   |
| `%epicbeheading_heads_rank%`       | Total heads rank   |
| `%epicbeheading_week_kills_rank%`  | Weekly kills rank  |
| `%epicbeheading_week_heads_rank%`  | Weekly heads rank  |
| `%epicbeheading_month_kills_rank%` | Monthly kills rank |
| `%epicbeheading_month_heads_rank%` | Monthly heads rank |

Leaderboard entries (N is the rank, 1 = top; supports 1 – top-size)

| Placeholder                                           | Meaning                        |
| ----------------------------------------------------- | ------------------------------ |
| `%epicbeheading_top_kills_name_N%`                    | Total kills rank N player name |
| `%epicbeheading_top_kills_value_N%`                   | Total kills rank N value       |
| `%epicbeheading_top_heads_name_N%` / `_value_N`       | Total heads board              |
| `%epicbeheading_week_top_kills_name_N%` / `_value_N`  | Weekly kills board             |
| `%epicbeheading_week_top_heads_name_N%` / `_value_N`  | Weekly heads board             |
| `%epicbeheading_month_top_kills_name_N%` / `_value_N` | Monthly kills board            |
| `%epicbeheading_month_top_heads_name_N%` / `_value_N` | Monthly heads board            |


    • Leaderboard cache refreshes asynchronously (default 60s); PAPI queries read memory directly — no sorting, no disk IO, no lag under high-frequency calls
    • Offline player queries are supported (personal data and ranks include offline players)

4. Multilingual Empty-Data Texts
Display texts for empty ranks/values moved to the leaderboard section of lang/*.yml, supporting 8 languages:

leaderboard:
  empty-name: "No data"
  empty-value: "No data"

Improvements



    • Configurable leaderboard refresh interval (leaderboard.refresh-interval, default 60s, async)
    • Configurable statistics save interval (leaderboard.stats-save-interval, default 300s)
    • Timezone-aware weekly/monthly period calculation (leaderboard.timezone), independent of the system default timezone
    • /ebh reload hot-reloads all leaderboard config, timezone, refresh interval, and Top size — no restart needed
    • PAPI Expansion sets persist(), so it is not unregistered on reload

Bug Fixes



    • Fixed Traditional Chinese (zh_tw) language file never being extracted to disk: the code extracted zh_hant.yml, but the actual resource is zh_tw.yml, so setting language: zh_tw left langConfig empty and all translations fell back. Now corrected to extract zh_tw.yml.

Configuration

# Head drop chance (default 0.05 = 5%)
drop-chance: 0.05

# Language: zh_cn / zh_tw / en / ja / ko / de / fr / ru
language: "en"

leaderboard:
  # Leaderboard cache refresh interval (seconds, async)
  refresh-interval: 60
  # Default leaderboard size (Top N)
  top-size: 10
  # Server timezone for weekly/monthly period calculation
  timezone: "Asia/Shanghai"
  # Statistics async save interval (seconds)
  stats-save-interval: 300
  # Weekly reset day (ISO week starts Monday)
  weekly-reset-day: MONDAY


Commands & Permissions

| Command       | Permission             | Default | Description                      |
| ------------- | ---------------------- | ------- | -------------------------------- |
| `/ebh reload` | `epicbeheading.reload` | op      | Reload config and language files |

Installation & Upgrade
Fresh install



    • Place EpicBeheading-1.1.3.jar in the server plugins/ directory
    • (Optional) Install PlaceholderAPI to use placeholders
    • Start the server; config and language files are generated automatically
    • Edit config.yml as needed, run
      /ebh reload

Upgrading from a previous version



    • Replace the old jar with the new one and restart the server
    • Storage location changed: the new version uses playerdata/data.db; the old statistics.yml is no longer read or written and can be deleted (if the old version never actually deployed statistics, there is no legacy data)
    • Language file upgrade: old on-disk lang/*.yml files lack the leaderboard section and will automatically use the fallback text "No data" (still functional). To display the proper localized version, delete the plugins/EpicBeheading/lang/ folder to regenerate it, or manually add the leaderboard section

Frequently Asked Questions

Q: Can I make heads drop 100% of the time?
A: Yes — set drop-chance: 1.0 in the configuration. For 0%, use drop-chance: 0.0.

Q: Will the heads always show the correct player skin?
A: Yes. The plugin sets the skull owner to the victim's Minecraft account username, so the official Mojang skin texture will render.

Q: What happens if the killer's inventory is completely full?
A: The head item will drop naturally at the victim's death location in the world, so the reward is never lost.

Q: Can I use this plugin alongside other PvP plugins?
A: EpicBeheading only listens to the PlayerDeathEvent and uses standard Bukkit APIs, so it should be compatible with most other PvP or anti-cheat plugins.

Q: Is there any economy integration or currency reward?
A: The current version (1.0.0) focuses solely on the head drop mechanic. Economy integration is not included at this time.

License
EpicBeheading version 1.0.0 uses the MIT License. You are free to use, modify, and distribute this plugin.
Versions above EpicBeheading 1.0.0 do not support using the MIT License.

Bstats

Similar projects

Plugin →