mcMMO/src/main/java/com/gmail/nossr50/util/Hardcore.java

83 lines
3.3 KiB
Java
Raw Normal View History

package com.gmail.nossr50.util;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.datatypes.PlayerProfile;
import com.gmail.nossr50.datatypes.SkillType;
2012-06-14 01:22:35 +02:00
public abstract class Hardcore {
2012-06-05 15:57:10 +02:00
2012-06-14 01:22:35 +02:00
public static void invokeStatPenalty(Player player) {
double hardcorePenalty = Config.getInstance().getHardcoreDeathStatPenaltyPercentage();
2012-06-05 15:57:10 +02:00
2012-06-14 01:22:35 +02:00
if (hardcorePenalty <= 0 || hardcorePenalty > 100) {
return;
}
2012-06-05 15:57:10 +02:00
2012-06-14 01:22:35 +02:00
PlayerProfile playerProfile = Users.getProfile(player);
int totalLost = 0;
2012-06-05 15:57:10 +02:00
2012-06-14 01:22:35 +02:00
for (SkillType skillType : SkillType.values()) {
if (skillType.equals(SkillType.ALL)) {
continue;
2012-06-14 01:22:35 +02:00
}
2012-06-05 15:57:10 +02:00
2012-06-14 01:22:35 +02:00
int playerSkillLevel = playerProfile.getSkillLevel(skillType);
2012-06-05 15:57:10 +02:00
2012-06-14 01:22:35 +02:00
//Should we really care about negative skill levels?
if (playerSkillLevel <= 0) {
continue;
}
2012-06-05 15:57:10 +02:00
2012-06-14 01:22:35 +02:00
int levelsLost = (int) (playerSkillLevel * (hardcorePenalty * 0.01D));
totalLost += levelsLost;
2012-06-05 15:57:10 +02:00
2012-06-14 01:22:35 +02:00
playerProfile.modifySkill(skillType, playerSkillLevel - levelsLost);
}
2012-06-05 15:57:10 +02:00
2012-06-14 01:22:35 +02:00
player.sendMessage(ChatColor.GOLD + "[mcMMO] " + ChatColor.DARK_RED + "You've lost " + ChatColor.BLUE + totalLost + ChatColor.DARK_RED + " from death.");
}
2012-06-05 15:57:10 +02:00
2012-06-14 01:22:35 +02:00
public static void invokeVampirism(Player killer, Player victim) {
double vampirismLeech = Config.getInstance().getHardcoreVampirismStatLeechPercentage();
2012-06-05 15:57:10 +02:00
2012-06-14 01:22:35 +02:00
if (vampirismLeech <= 0 || vampirismLeech > 100) {
return;
}
2012-06-05 15:57:10 +02:00
2012-06-14 01:22:35 +02:00
PlayerProfile killerProfile = Users.getProfile(killer);
PlayerProfile victimProfile = Users.getProfile(victim);
int totalStolen = 0;
2012-06-05 15:57:10 +02:00
2012-06-14 01:22:35 +02:00
for (SkillType skillType : SkillType.values()) {
if (skillType.equals(SkillType.ALL)) {
2012-05-22 08:30:16 +02:00
continue;
2012-06-14 01:22:35 +02:00
}
2012-06-05 15:57:10 +02:00
2012-06-14 01:22:35 +02:00
int killerSkillLevel = killerProfile.getSkillLevel(skillType);
int victimSkillLevel = victimProfile.getSkillLevel(skillType);
2012-06-05 15:57:10 +02:00
2012-06-14 01:22:35 +02:00
//Should we really care about negative skill levels?
if (victimSkillLevel <= 0 || victimSkillLevel < killerSkillLevel / 2) {
continue;
}
2012-06-05 15:57:10 +02:00
2012-06-14 01:22:35 +02:00
int levelsStolen = (int) (victimSkillLevel * (vampirismLeech * 0.01D));
totalStolen += levelsStolen;
2012-06-05 15:57:10 +02:00
2012-06-14 01:22:35 +02:00
killerProfile.modifySkill(skillType, killerSkillLevel + levelsStolen);
victimProfile.modifySkill(skillType, victimSkillLevel - levelsStolen);
}
2012-06-05 15:57:10 +02:00
2012-06-14 01:22:35 +02:00
if (totalStolen > 0) {
killer.sendMessage(ChatColor.GOLD + "[mcMMO] " + ChatColor.DARK_AQUA + "You've stolen " + ChatColor.BLUE + totalStolen + ChatColor.DARK_AQUA + " levels from that player.");
victim.sendMessage(ChatColor.GOLD + "[mcMMO] " + ChatColor.YELLOW + killer.getName() + ChatColor.DARK_RED + " has stolen " + ChatColor.BLUE + totalStolen + ChatColor.DARK_RED + " levels from you!");
}
else {
killer.sendMessage(ChatColor.GOLD + "[mcMMO] " + ChatColor.GRAY + "That player was too unskilled to grant you any knowledge.");
victim.sendMessage(ChatColor.GOLD + "[mcMMO] " + ChatColor.YELLOW + killer.getName() + ChatColor.GRAY + " was unable to steal knowledge from you!");
}
}
}