mirror of
				https://github.com/mcMMO-Dev/mcMMO.git
				synced 2025-11-04 11:03:43 +01:00 
			
		
		
		
	Partially fixed /Addxp on offline player
Xp is awarded but in order to level up the player need to log in and use his skills.
This commit is contained in:
		@@ -5,7 +5,6 @@ import org.bukkit.command.CommandExecutor;
 | 
				
			|||||||
import org.bukkit.command.CommandSender;
 | 
					import org.bukkit.command.CommandSender;
 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.gmail.nossr50.mcMMO;
 | 
					 | 
				
			||||||
import com.gmail.nossr50.datatypes.McMMOPlayer;
 | 
					import com.gmail.nossr50.datatypes.McMMOPlayer;
 | 
				
			||||||
import com.gmail.nossr50.datatypes.PlayerProfile;
 | 
					import com.gmail.nossr50.datatypes.PlayerProfile;
 | 
				
			||||||
import com.gmail.nossr50.locale.LocaleLoader;
 | 
					import com.gmail.nossr50.locale.LocaleLoader;
 | 
				
			||||||
@@ -64,16 +63,6 @@ public class AddxpCommand implements CommandExecutor {
 | 
				
			|||||||
                return true;
 | 
					                return true;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            modifiedPlayer = mcMMO.p.getServer().getPlayer(args[0]);
 | 
					 | 
				
			||||||
            mcMMOPlayer = Users.getPlayer(modifiedPlayer);
 | 
					 | 
				
			||||||
            profile = mcMMOPlayer.getProfile();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
          //TODO: Any way we can make this work for offline use?
 | 
					 | 
				
			||||||
            if (profile == null || !profile.isLoaded()) {
 | 
					 | 
				
			||||||
                sender.sendMessage(LocaleLoader.getString("Commands.DoesNotExist"));
 | 
					 | 
				
			||||||
                return true;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (!SkillTools.isSkill(args[1])) {
 | 
					            if (!SkillTools.isSkill(args[1])) {
 | 
				
			||||||
                sender.sendMessage(LocaleLoader.getString("Commands.Skill.Invalid"));
 | 
					                sender.sendMessage(LocaleLoader.getString("Commands.Skill.Invalid"));
 | 
				
			||||||
                return true;
 | 
					                return true;
 | 
				
			||||||
@@ -83,21 +72,62 @@ public class AddxpCommand implements CommandExecutor {
 | 
				
			|||||||
                return false;
 | 
					                return false;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            mcMMOPlayer = Users.getPlayer(args[0]);
 | 
				
			||||||
            xp = Integer.valueOf(args[2]);
 | 
					            xp = Integer.valueOf(args[2]);
 | 
				
			||||||
            skill = SkillTools.getSkillType(args[1]);
 | 
					            skill = SkillTools.getSkillType(args[1]);
 | 
				
			||||||
            String playerName = modifiedPlayer.getName();
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            mcMMOPlayer.addXpOverride(skill, xp);
 | 
					            // If the mcMMOPlayer doesn't exist, create a temporary profile and check if it's present in the database. If it's not, abort the process.
 | 
				
			||||||
 | 
					            if (mcMMOPlayer == null) {
 | 
				
			||||||
 | 
					                profile = new PlayerProfile(args[0], false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (skill.equals(SkillType.ALL)) {
 | 
					                if (!profile.isLoaded()) {
 | 
				
			||||||
                sender.sendMessage(LocaleLoader.getString("Commands.addlevels.AwardAll.2", playerName));
 | 
					                    sender.sendMessage(LocaleLoader.getString("Commands.DoesNotExist"));
 | 
				
			||||||
                modifiedPlayer.sendMessage(LocaleLoader.getString("Commands.addxp.AwardAll", xp));
 | 
					                    return true;
 | 
				
			||||||
                SkillTools.xpCheckAll(modifiedPlayer, profile);
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                // This is basically a copy of McMMOPlayer.addXpOverride(), this method should probably be moved to PlayerProfile to avoid that
 | 
				
			||||||
 | 
					                if (skill.equals(SkillType.ALL)) {
 | 
				
			||||||
 | 
					                    for (SkillType type : SkillType.values()) {
 | 
				
			||||||
 | 
					                        if (type.equals(SkillType.ALL) || type.isChildSkill()) {
 | 
				
			||||||
 | 
					                            continue;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        profile.setSkillXpLevel(type, profile.getSkillXpLevel(type) + xp);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    // TODO: Find a way to make it work, it currently requires a valid Player
 | 
				
			||||||
 | 
					                    // SkillTools.xpCheckAll(modifiedPlayer, profile);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                else {
 | 
				
			||||||
 | 
					                    profile.setSkillXpLevel(skill, profile.getSkillXpLevel(skill) + xp);
 | 
				
			||||||
 | 
					                    // TODO: Find a way to make it work, it currently requires a valid Player
 | 
				
			||||||
 | 
					                    // SkillTools.xpCheckSkill(skill, modifiedPlayer, profile);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                profile.save(); // Since this is a temporary profile, we save it here.
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            else {
 | 
					            else {
 | 
				
			||||||
                sender.sendMessage(LocaleLoader.getString("Commands.addlevels.AwardSkill.2", Misc.getCapitalized(skill.toString()), playerName));
 | 
					                mcMMOPlayer.addXpOverride(skill, xp);
 | 
				
			||||||
                modifiedPlayer.sendMessage(LocaleLoader.getString("Commands.addxp.AwardSkill", xp, Misc.getCapitalized(skill.toString())));
 | 
					
 | 
				
			||||||
                SkillTools.xpCheckSkill(skill, modifiedPlayer, profile);
 | 
					                modifiedPlayer = mcMMOPlayer.getPlayer();
 | 
				
			||||||
 | 
					                profile = mcMMOPlayer.getProfile();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (modifiedPlayer.isOnline()) {
 | 
				
			||||||
 | 
					                    if (skill.equals(SkillType.ALL)) {
 | 
				
			||||||
 | 
					                        modifiedPlayer.sendMessage(LocaleLoader.getString("Commands.addxp.AwardAll", xp));
 | 
				
			||||||
 | 
					                        SkillTools.xpCheckAll(modifiedPlayer, profile);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    else {
 | 
				
			||||||
 | 
					                        modifiedPlayer.sendMessage(LocaleLoader.getString("Commands.addxp.AwardSkill", xp, Misc.getCapitalized(skill.toString())));
 | 
				
			||||||
 | 
					                        SkillTools.xpCheckSkill(skill, modifiedPlayer, profile);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (skill.equals(SkillType.ALL)) {
 | 
				
			||||||
 | 
					                sender.sendMessage(LocaleLoader.getString("Commands.addlevels.AwardAll.2", args[0]));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else {
 | 
				
			||||||
 | 
					                sender.sendMessage(LocaleLoader.getString("Commands.addlevels.AwardSkill.2", Misc.getCapitalized(skill.toString()), args[0]));
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return true;
 | 
					            return true;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user