55import java .util .List ;
66
77import org .bukkit .Bukkit ;
8- import org .bukkit .OfflinePlayer ;
98import org .bukkit .configuration .file .FileConfiguration ;
10- import org .bukkit .configuration .ConfigurationSection ;
119import org .bukkit .entity .Player ;
1210import org .bukkit .event .EventHandler ;
1311import org .bukkit .event .Listener ;
2624import net .laboulangerie .laboulangeriemmo .core .XpBar ;
2725import net .laboulangerie .laboulangeriemmo .events .PlayerLevelUpEvent ;
2826import net .laboulangerie .laboulangeriemmo .events .XpCountDownFinishedEvent ;
29- import net .milkbowl .vault .economy .EconomyResponse ;
3027
3128public class MmoListener implements Listener {
3229
3330 @ EventHandler
3431 public void onLevelUp (PlayerLevelUpEvent event ) {
3532 FileConfiguration config = LaBoulangerieMmo .PLUGIN .getConfig ();
3633
37- OfflinePlayer offlinePlayer = Bukkit .getOfflinePlayer (event .getPlayer ().getUniqueId ());
38- Player player = offlinePlayer .getPlayer ();
34+ Player player = Bukkit .getPlayer (event .getPlayer ().getUniqueId ());
3935 Talent talent = event .getTalent ();
4036 TalentArchetype talentArchetype = LaBoulangerieMmo .talentsRegistry .getTalent (talent .getTalentId ());
4137
4238 List <TagResolver .Single > resolvers = new ArrayList <>();
4339 resolvers .add (Placeholder .parsed ("level" , Integer .toString (event .getNewLevel ())));
4440 resolvers .add (Placeholder .parsed ("talent" , talent .getDisplayName ()));
4541
46- ConfigurationSection rewards =
47- config .getConfigurationSection ("level-up-rewards." + talent .getTalentId ());
48- double amount = calculateLevelRewards (
49- rewards , event .getPreviousLevel (), event .getNewLevel (), config .getString ("rewards-rounding-method" , "no" ));
50- boolean rewardPaid = false ;
51- if (amount > 0 ) {
52- EconomyResponse response = LaBoulangerieMmo .ECONOMY .depositPlayer (offlinePlayer , amount );
53- if (response .transactionSuccess ()) {
54- rewardPaid = true ;
55- resolvers .add (Placeholder .parsed ("reward" , LaBoulangerieMmo .ECONOMY .format (amount )));
56- } else {
57- LaBoulangerieMmo .PLUGIN .getLogger ().warning ("Unable to pay " + amount + " to "
58- + offlinePlayer .getName () + " for " + talent .getTalentId () + " levels "
59- + (event .getPreviousLevel () + 1 ) + "-" + event .getNewLevel () + ": " + response .errorMessage );
60- }
61- }
62-
6342 if (player == null ) return ;
6443 Component prefix = MiniMessage .miniMessage ().deserialize (config .getString ("lang.prefix" ));
6544
@@ -86,9 +65,8 @@ public void onLevelUp(PlayerLevelUpEvent event) {
8665 }
8766 }
8867
89- String levelMessage = rewardPaid ? "lang.messages.level-up" : "lang.messages.level-up-no-reward" ;
9068 Component lvlUpComponent = MiniMessage .miniMessage ()
91- .deserialize (config .getString (levelMessage ), TagResolver .resolver (resolvers ));
69+ .deserialize (config .getString ("lang.messages.level-up" ), TagResolver .resolver (resolvers ));
9270 player .sendMessage (prefix .append (lvlUpComponent ));
9371
9472 Component titleComponent =
@@ -129,54 +107,6 @@ public void onCountDownFinished(XpCountDownFinishedEvent event) {
129107 player .sendActionBar (message );
130108 }
131109
132- static double calculateLevelReward (ConfigurationSection rewards , int level , double levelXp ) {
133- if (rewards == null || level <= 0 ) return 0 ;
134-
135- double amount = processMoneyAmount (rewards .getString ("*" ), levelXp );
136- amount += processMoneyAmount (rewards .getString (Integer .toString (level )), levelXp );
137-
138- ConfigurationSection progressive = rewards .getConfigurationSection ("progressive" );
139- if (progressive == null || !progressive .isSet ("levels-per-step" )
140- || !progressive .isSet ("amount-per-step" )) {
141- return amount ;
142- }
143-
144- int levelsPerStep = progressive .getInt ("levels-per-step" );
145- double amountPerStep = progressive .getDouble ("amount-per-step" );
146- if (levelsPerStep <= 0 || amountPerStep <= 0 ) return amount ;
147-
148- return amount + ((level / levelsPerStep ) + 1 ) * amountPerStep ;
149- }
150-
151- static double calculateLevelRewards (
152- ConfigurationSection rewards , int previousLevel , int newLevel , String roundingMethod ) {
153- return calculateLevelRewards (
154- rewards , previousLevel , newLevel , roundingMethod , LaBoulangerieMmo .XP_MULTIPLIER );
155- }
156-
157- static double calculateLevelRewards (ConfigurationSection rewards , int previousLevel , int newLevel ,
158- String roundingMethod , double xpMultiplier ) {
159- if (newLevel <= previousLevel ) return 0 ;
160- if (xpMultiplier <= 0 || !Double .isFinite (xpMultiplier )) return 0 ;
161-
162- double total = 0 ;
163- for (int level = Math .max (1 , previousLevel + 1 ); level <= newLevel ; level ++) {
164- double levelXp = Math .pow (level / xpMultiplier , 2 );
165- total += roundReward (calculateLevelReward (rewards , level , levelXp ), roundingMethod );
166- }
167- return total ;
168- }
169-
170- private static double roundReward (double amount , String method ) {
171- if (method == null ) return amount ;
172- return switch (method ) {
173- case "closest" -> Math .round (amount );
174- case "up" -> Math .ceil (amount );
175- case "down" -> Math .floor (amount );
176- default -> amount ;
177- };
178- }
179-
180110 private static boolean crossedLevel (PlayerLevelUpEvent event , int requiredLevel ) {
181111 return requiredLevel > event .getPreviousLevel () && requiredLevel <= event .getNewLevel ();
182112 }
@@ -187,22 +117,4 @@ private static void sendAbilityMessage(Player player, Component prefix, String m
187117 player .sendMessage (prefix .append (component ));
188118 }
189119
190- private static double processMoneyAmount (String rawAmount , double levelXp ) {
191- if (rawAmount == null ) return 0 ;
192-
193- if (rawAmount .endsWith ("%" )) {
194- double percentage = 0 ;
195- try {
196- percentage = Double .parseDouble (rawAmount .split ("%" )[0 ]);
197- } catch (Exception e ) {
198- }
199- return levelXp * percentage / 100 ;
200- }
201- try {
202- return Double .parseDouble (rawAmount );
203- } catch (Exception e ) {
204- }
205-
206- return 0 ;
207- }
208120}
0 commit comments