-
Notifications
You must be signed in to change notification settings - Fork 107
Description
Feature request
What part of MyPet needs this?
the plugin itself
Is your feature request related to a problem? Please describe
Currently, the experience multiplier system via permissions (MyPet.experience.multiplier.X) only supports a few fixed values like 2.5, 2.25, 2.0, 1.75, 1.5, 1.25.
This makes it difficult for server owners to finely tune the XP boost for players. For example, sometimes I want to grant small incremental boosts (like +3% or +7%), but the current system only allows big jumps.
Describe the solution you'd like
I would like the experience multiplier system to support more granular steps.
Instead of only a handful of fixed multipliers, the plugin should allow all values within a range, for example:
MyPet.experience.multiplier.101 → 1.01×
MyPet.experience.multiplier.150 → 1.50×
MyPet.experience.multiplier.200 → 2.00×
This way, server owners can configure very fine XP boosts depending on ranks, events, or donor tiers.
I have already tested a modified version of the PermissionModifier file that implements this finer step logic (0.01 increments between 1.01 and 2.00).
Here is the improved version I used:
if (owner.hasPermission("MyPet.experience.multiplier.200")) {
experience *= 2.00;
} else if (owner.hasPermission("MyPet.experience.multiplier.199")) {
experience *= 1.99;
} else if (owner.hasPermission("MyPet.experience.multiplier.198")) {
experience *= 1.98;
// ... continues down ...
} else if (owner.hasPermission("MyPet.experience.multiplier.101")) {
experience *= 1.01;
}
Describe alternatives you've considered
Adding more “hardcoded” values like 1.1, 1.2, 1.3…
Using external plugins to add multipliers, but that makes it harder to maintain.
The native implementation inside MyPet would be the cleanest and most user-friendly solution.
Additional context
This improvement would give server owners full control over XP boost balance.
Especially for servers with ranking systems, events, or donation tiers, fine-tuned multipliers are essential.
Bukkit/Spigot/Paper Build/Version: Paper 1.20.1
MyPet Build/Version: v3.12 (example, please adjust to your version)
File :
/*
* This file is part of MyPet
*
* Copyright © 2011-2019 Keyle
* MyPet is licensed under the GNU Lesser General Public License.
*
* MyPet is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* MyPet is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package de.Keyle.MyPet.api.skill.experience.modifier;
import de.Keyle.MyPet.api.Configuration.LevelSystem.Experience.Modifier;
import de.Keyle.MyPet.api.entity.MyPet;
import org.bukkit.entity.Player;
public class PermissionModifier extends ExperienceModifier {
MyPet myPet;
public PermissionModifier(MyPet myPet) {
this.myPet = myPet;
} // 여기
public double modify(double experience, double baseExperience) {
if (Modifier.PERMISSION) {
Player owner = myPet.getOwner().getPlayer();
if (owner != null) {
if (owner.hasPermission("MyPet.experience.multiplier.200")) {
experience *= 2.00;
} else if (owner.hasPermission("MyPet.experience.multiplier.199")) {
experience *= 1.99;
} else if (owner.hasPermission("MyPet.experience.multiplier.198")) {
experience *= 1.98;
} else if (owner.hasPermission("MyPet.experience.multiplier.197")) {
experience *= 1.97;
} else if (owner.hasPermission("MyPet.experience.multiplier.196")) {
experience *= 1.96;
} else if (owner.hasPermission("MyPet.experience.multiplier.195")) {
experience *= 1.95;
} else if (owner.hasPermission("MyPet.experience.multiplier.194")) {
experience *= 1.94;
} else if (owner.hasPermission("MyPet.experience.multiplier.193")) {
experience *= 1.93;
} else if (owner.hasPermission("MyPet.experience.multiplier.192")) {
experience *= 1.92;
} else if (owner.hasPermission("MyPet.experience.multiplier.191")) {
experience *= 1.91;
} else if (owner.hasPermission("MyPet.experience.multiplier.190")) {
experience *= 1.90;
} else if (owner.hasPermission("MyPet.experience.multiplier.189")) {
experience *= 1.89;
} else if (owner.hasPermission("MyPet.experience.multiplier.188")) {
experience *= 1.88;
} else if (owner.hasPermission("MyPet.experience.multiplier.187")) {
experience *= 1.87;
} else if (owner.hasPermission("MyPet.experience.multiplier.186")) {
experience *= 1.86;
} else if (owner.hasPermission("MyPet.experience.multiplier.185")) {
experience *= 1.85;
} else if (owner.hasPermission("MyPet.experience.multiplier.184")) {
experience *= 1.84;
} else if (owner.hasPermission("MyPet.experience.multiplier.183")) {
experience *= 1.83;
} else if (owner.hasPermission("MyPet.experience.multiplier.182")) {
experience *= 1.82;
} else if (owner.hasPermission("MyPet.experience.multiplier.181")) {
experience *= 1.81;
} else if (owner.hasPermission("MyPet.experience.multiplier.180")) {
experience *= 1.80;
} else if (owner.hasPermission("MyPet.experience.multiplier.179")) {
experience *= 1.79;
} else if (owner.hasPermission("MyPet.experience.multiplier.178")) {
experience *= 1.78;
} else if (owner.hasPermission("MyPet.experience.multiplier.177")) {
experience *= 1.77;
} else if (owner.hasPermission("MyPet.experience.multiplier.176")) {
experience *= 1.76;
} else if (owner.hasPermission("MyPet.experience.multiplier.175")) {
experience *= 1.75;
} else if (owner.hasPermission("MyPet.experience.multiplier.174")) {
experience *= 1.74;
} else if (owner.hasPermission("MyPet.experience.multiplier.173")) {
experience *= 1.73;
} else if (owner.hasPermission("MyPet.experience.multiplier.172")) {
experience *= 1.72;
} else if (owner.hasPermission("MyPet.experience.multiplier.171")) {
experience *= 1.71;
} else if (owner.hasPermission("MyPet.experience.multiplier.170")) {
experience *= 1.70;
} else if (owner.hasPermission("MyPet.experience.multiplier.169")) {
experience *= 1.69;
} else if (owner.hasPermission("MyPet.experience.multiplier.168")) {
experience *= 1.68;
} else if (owner.hasPermission("MyPet.experience.multiplier.167")) {
experience *= 1.67;
} else if (owner.hasPermission("MyPet.experience.multiplier.166")) {
experience *= 1.66;
} else if (owner.hasPermission("MyPet.experience.multiplier.165")) {
experience *= 1.65;
} else if (owner.hasPermission("MyPet.experience.multiplier.164")) {
experience *= 1.64;
} else if (owner.hasPermission("MyPet.experience.multiplier.163")) {
experience *= 1.63;
} else if (owner.hasPermission("MyPet.experience.multiplier.162")) {
experience *= 1.62;
} else if (owner.hasPermission("MyPet.experience.multiplier.161")) {
experience *= 1.61;
} else if (owner.hasPermission("MyPet.experience.multiplier.160")) {
experience *= 1.60;
} else if (owner.hasPermission("MyPet.experience.multiplier.159")) {
experience *= 1.59;
} else if (owner.hasPermission("MyPet.experience.multiplier.158")) {
experience *= 1.58;
} else if (owner.hasPermission("MyPet.experience.multiplier.157")) {
experience *= 1.57;
} else if (owner.hasPermission("MyPet.experience.multiplier.156")) {
experience *= 1.56;
} else if (owner.hasPermission("MyPet.experience.multiplier.155")) {
experience *= 1.55;
} else if (owner.hasPermission("MyPet.experience.multiplier.154")) {
experience *= 1.54;
} else if (owner.hasPermission("MyPet.experience.multiplier.153")) {
experience *= 1.53;
} else if (owner.hasPermission("MyPet.experience.multiplier.152")) {
experience *= 1.52;
} else if (owner.hasPermission("MyPet.experience.multiplier.151")) {
experience *= 1.51;
} else if (owner.hasPermission("MyPet.experience.multiplier.150")) {
experience *= 1.50;
} else if (owner.hasPermission("MyPet.experience.multiplier.149")) {
experience *= 1.49;
} else if (owner.hasPermission("MyPet.experience.multiplier.148")) {
experience *= 1.48;
} else if (owner.hasPermission("MyPet.experience.multiplier.147")) {
experience *= 1.47;
} else if (owner.hasPermission("MyPet.experience.multiplier.146")) {
experience *= 1.46;
} else if (owner.hasPermission("MyPet.experience.multiplier.145")) {
experience *= 1.45;
} else if (owner.hasPermission("MyPet.experience.multiplier.144")) {
experience *= 1.44;
} else if (owner.hasPermission("MyPet.experience.multiplier.143")) {
experience *= 1.43;
} else if (owner.hasPermission("MyPet.experience.multiplier.142")) {
experience *= 1.42;
} else if (owner.hasPermission("MyPet.experience.multiplier.141")) {
experience *= 1.41;
} else if (owner.hasPermission("MyPet.experience.multiplier.140")) {
experience *= 1.40;
} else if (owner.hasPermission("MyPet.experience.multiplier.139")) {
experience *= 1.39;
} else if (owner.hasPermission("MyPet.experience.multiplier.138")) {
experience *= 1.38;
} else if (owner.hasPermission("MyPet.experience.multiplier.137")) {
experience *= 1.37;
} else if (owner.hasPermission("MyPet.experience.multiplier.136")) {
experience *= 1.36;
} else if (owner.hasPermission("MyPet.experience.multiplier.135")) {
experience *= 1.35;
} else if (owner.hasPermission("MyPet.experience.multiplier.134")) {
experience *= 1.34;
} else if (owner.hasPermission("MyPet.experience.multiplier.133")) {
experience *= 1.33;
} else if (owner.hasPermission("MyPet.experience.multiplier.132")) {
experience *= 1.32;
} else if (owner.hasPermission("MyPet.experience.multiplier.131")) {
experience *= 1.31;
} else if (owner.hasPermission("MyPet.experience.multiplier.130")) {
experience *= 1.3;
} else if (owner.hasPermission("MyPet.experience.multiplier.129")) {
experience *= 1.29;
} else if (owner.hasPermission("MyPet.experience.multiplier.128")) {
experience *= 1.28;
} else if (owner.hasPermission("MyPet.experience.multiplier.127")) {
experience *= 1.27;
} else if (owner.hasPermission("MyPet.experience.multiplier.126")) {
experience *= 1.26;
} else if (owner.hasPermission("MyPet.experience.multiplier.125")) {
experience *= 1.25;
} else if (owner.hasPermission("MyPet.experience.multiplier.124")) {
experience *= 1.24;
} else if (owner.hasPermission("MyPet.experience.multiplier.123")) {
experience *= 1.23;
} else if (owner.hasPermission("MyPet.experience.multiplier.122")) {
experience *= 1.22;
} else if (owner.hasPermission("MyPet.experience.multiplier.121")) {
experience *= 1.21;
} else if (owner.hasPermission("MyPet.experience.multiplier.120")) {
experience *= 1.20;
} else if (owner.hasPermission("MyPet.experience.multiplier.119")) {
experience *= 1.19;
} else if (owner.hasPermission("MyPet.experience.multiplier.118")) {
experience *= 1.18;
} else if (owner.hasPermission("MyPet.experience.multiplier.117")) {
experience *= 1.17;
} else if (owner.hasPermission("MyPet.experience.multiplier.116")) {
experience *= 1.16;
} else if (owner.hasPermission("MyPet.experience.multiplier.115")) {
experience *= 1.15;
} else if (owner.hasPermission("MyPet.experience.multiplier.114")) {
experience *= 1.14;
} else if (owner.hasPermission("MyPet.experience.multiplier.113")) {
experience *= 1.13;
} else if (owner.hasPermission("MyPet.experience.multiplier.112")) {
experience *= 1.12;
} else if (owner.hasPermission("MyPet.experience.multiplier.111")) {
experience *= 1.11;
} else if (owner.hasPermission("MyPet.experience.multiplier.110")) {
experience *= 1.1;
} else if (owner.hasPermission("MyPet.experience.multiplier.109")) {
experience *= 1.09;
} else if (owner.hasPermission("MyPet.experience.multiplier.108")) {
experience *= 1.08;
} else if (owner.hasPermission("MyPet.experience.multiplier.107")) {
experience *= 1.07;
} else if (owner.hasPermission("MyPet.experience.multiplier.106")) {
experience *= 1.06;
} else if (owner.hasPermission("MyPet.experience.multiplier.105")) {
experience *= 1.05;
} else if (owner.hasPermission("MyPet.experience.multiplier.104")) {
experience *= 1.04;
} else if (owner.hasPermission("MyPet.experience.multiplier.103")) {
experience *= 1.03;
} else if (owner.hasPermission("MyPet.experience.multiplier.102")) {
experience *= 1.02;
} else if (owner.hasPermission("MyPet.experience.multiplier.101")) {
experience *= 1.01;
}
}
}
return experience;
}
}