1.0.0
Compatibility
Changes
Resize
Smoothly change a player's size in-game, with donator classes, automatic timed resets, and per-world restrictions — built for servers that sell size perks and need it to expire cleanly.
Requirements
- Paper (or a Paper fork) 1.21.x
Installation
- Drop the jar into your server's
plugins/folder and restart (or/reload, though a restart is safer). - A
config.ymland alang/folder (withen.ymlandru.yml) will be generated inplugins/Resize/. - Set
language: "en"orlanguage: "ru"inconfig.yml, edit whatever you want, then run/resizereload.
Features
- Smooth, animated size changes (not an instant snap)
- Unlimited donator classes — define any number of permission-based size tiers (e.g. Iron, Diamond) with their own min/max range, fully configurable, no code editing needed
- Automatic timed resets — pair a temporary permission grant with
/resizescheduleso a player's size reliably returns to normal when their donation period ends, even if they were offline when it expired or the server restarted in between - Per-world restrictions — block resizing entirely in chosen worlds, or force a player's size back to normal the moment they enter one (e.g. the Nether)
- Configurable cooldown between uses
- Full permission set, so admins control exactly who can resize themselves, resize others, bypass the cooldown, bypass world restrictions, or manage timers
- Multi-language support (English and Russian included) with fully customizable message text, including the prefix — MiniMessage formatting throughout: named colors,
<#RRGGBB>hex, and gradients all supported - Master on/off switches for world restrictions, scheduling, and cooldown, so you only run what you need
Commands
| Command | Permission | Description |
|---|---|---|
/resize <scale> |
resizeplugin.resize |
Resize yourself |
/resize <player> <scale> |
resizeplugin.resize.others |
Resize another player |
/resizeschedule <player> <duration> |
resizeplugin.schedule |
Schedule an automatic reset back to normal after a delay |
/resizecancel <player> |
resizeplugin.schedule |
Cancel a pending scheduled reset |
/resizetime [player] |
resizeplugin.time / resizeplugin.time.others |
Check how long until a size auto-resets |
/resizereload |
resizeplugin.reload |
Reload config.yml and the active language file |
Duration format for /resizeschedule: 30d, 12h, 45m, 20s, or combinations like 1d12h — the same tokens LuckPerms uses for settemp.
Permissions
| Permission | Default | Description |
|---|---|---|
resizeplugin.resize |
false | Use /resize on yourself. Grant this to your donator rank (or see below to make it free for everyone) |
resizeplugin.resize.extended |
false | Ships as an example donator tier (0.0625–16.0) in scale.tiers — rename/replace freely |
resizeplugin.resize.others |
op | Resize other players |
resizeplugin.bypass.cooldown |
op | Bypass the cooldown |
resizeplugin.bypass.worldrestriction |
op | Ignore world restrictions entirely |
resizeplugin.schedule |
op | Use /resizeschedule and /resizecancel |
resizeplugin.reload |
op | Use /resizereload |
resizeplugin.time |
true | Check your own remaining time with /resizetime |
resizeplugin.time.others |
op | Check another player's remaining time |
resizeplugin.* |
false | Grants everything above |
Donator size classes (scale.tiers)
Instead of one fixed range, config.yml has an ordered list of size classes. Each has its own permission node and its own min/max range:
scale:
tiers:
- permission: ""
min: 0.8
max: 1.15
- permission: "resizeplugin.resize.extended"
min: 0.0625
max: 16.0
# - permission: "resizeplugin.tier.iron"
# min: 1.0
# max: 1.5
# - permission: "resizeplugin.tier.diamond"
# min: 2.0
# max: 2.5
- Checked top to bottom; if a player qualifies for more than one, the last matching entry wins — list weaker/free tiers first, stronger/paid tiers last.
permission: ""applies to everyone who can use/resizeat all.- Add, rename, reorder, or delete entries freely — no code changes needed, just
/resizereloadafter editing. - Uncomment or duplicate the example lines to create your own donator ranks (Iron, Diamond, VIP, whatever you sell), each gated by its own LuckPerms permission.
Making /resize itself free (or donator-only)
By default resizeplugin.resize is required to use /resize at all (recommended if size is a paid perk). If you'd rather let everyone use the base range and only gate the bigger ranges behind donator tiers, flip this in config.yml:
features:
require-resize-permission: false
Solving the classic "temp permission expires, size doesn't" problem
Donation panels typically grant a size perk with something like:
lp user {player} permission settemp resizeplugin.resize.extended true 30d
That alone doesn't reset the player's size when the 30 days are up — LuckPerms and the plugin don't talk to each other. Pair it with a second command from your panel:
resizeschedule {player} 30d
The plugin stores this in scheduled-resets.yml inside its data folder, checks for due resets on an interval (configurable, see below), and applies it even if the player is offline when it fires — it catches up on their next login. It survives restarts and doesn't depend on the LuckPerms permission itself still existing; it just reliably sets the player back to scale.base-value at the scheduled time. Players can check their own remaining time with /resizetime.
Per-world restrictions
worlds:
disabled-worlds:
# - "world_nether"
force-reset-worlds:
# - "world_nether"
# - "world_the_end"
disabled-worlds—/resizeis blocked entirely while standing in one of these worlds.force-reset-worlds— blocked and the player's size is instantly reset back toscale.base-valuethe moment they enter (e.g. "enter the Nether → back to normal size, and can't resize again until they leave").- Both lists are empty by default and only take effect once
features.world-restrictions-enabled: trueis set. resizeplugin.bypass.worldrestrictionlets admins/staff ignore both lists.
Turning features on/off
config.yml has a features section so you can disable parts of the plugin without touching anything else:
features:
world-restrictions-enabled: false # the two world lists above
scheduling-enabled: true # /resizeschedule and /resizecancel
cooldown-enabled: true # the /resize cooldown
require-resize-permission: true # whether resizeplugin.resize is required at all
Performance / the "check every second" scheduler
scheduling.check-interval-seconds (default 1) controls how often the plugin scans for due scheduled resets. This is a cheap in-memory map scan — even at 1 second it's not something you'll notice on server performance — but you can raise it (e.g. 5) if you want to be extra conservative; resets will then fire up to that many seconds late.
Cooldown
cooldown:
seconds: 30
Seconds a player must wait between uses of /resize on themselves. Ignored entirely if features.cooldown-enabled: false, and bypassable per-player with resizeplugin.bypass.cooldown.
Localization & colors
config.yml's language key points at a file in lang/ (en.yml and ru.yml are included — add your own by dropping a new <code>.yml in that folder and setting language to match). Every message, including the prefix shown before each line, lives in that file and is parsed with MiniMessage, so named colors, <#RRGGBB> hex codes, and <gradient:...> all work anywhere in it. Edit, save, /resizereload — no restart needed.
Troubleshooting
If a future Paper release removes Attribute.GENERIC_SCALE (it's currently deprecated in favor of a registry lookup, scheduled for removal no earlier than 1.22) and the plugin fails to load with an Attribute-related error on startup, check for a plugin update or report it on the issue tracker with your exact Paper version.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:Bn5dIH1n:U6ArRye6"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:Bn5dIH1n:U6ArRye6"
}

