- Every source of experience should now display an xp hologram.

- Class Icons can now use player heads with texture values
This commit is contained in:
Aria 2019-11-23 11:52:00 +01:00
parent 7b7b35e4a1
commit d7c2d300ba
17 changed files with 58 additions and 26 deletions

View File

@ -169,7 +169,7 @@ public class BrewPotionExperienceSource extends ExperienceSource<PotionMeta> {
*/
// exp += getTotal(mapEffectDurations());
giveExperience(PlayerData.get(player), (int) exp);
giveExperience(PlayerData.get(player), (int) exp, null);
}
}
}

View File

@ -60,7 +60,7 @@ public class EnchantItemExperienceSource extends ExperienceSource<Void> {
double exp = 0;
for (Entry<Enchantment, Integer> entry : ench.entrySet())
exp += MMOCore.plugin.enchantManager.getBaseExperience(entry.getKey()) * entry.getValue();
giveExperience(player, (int) exp);
giveExperience(player, (int) exp, event.getEnchantBlock().getLocation());
}
}
};

View File

@ -38,7 +38,7 @@ public class FishItemExperienceSource extends SpecificExperienceSource<ItemStack
PlayerData data = PlayerData.get(event.getPlayer());
for (FishItemExperienceSource source : getSources())
if (source.matches(data, caught))
source.giveExperience(data);
source.giveExperience(data, event.getHook().getLocation().add(0, 1.0f, 0));
}
}
};

View File

@ -33,7 +33,7 @@ public class KillMobExperienceSource extends SpecificExperienceSource<Entity> {
for (KillMobExperienceSource source : getSources())
if (source.matches(data, event.getTarget()))
source.giveExperience(data);
source.giveExperience(data, event.getTarget().getLocation());
}
}
};

View File

@ -51,7 +51,7 @@ public class MineBlockExperienceSource extends SpecificExperienceSource<Material
continue;
if (source.matches(data, event.getBlock().getType()))
source.giveExperience(data);
source.giveExperience(data, event.getBlock().getLocation());
}
}
};

View File

@ -34,7 +34,7 @@ public class PlaceBlockExperienceSource extends SpecificExperienceSource<Materia
for (PlaceBlockExperienceSource source : getSources()) {
if (source.matches(data, event.getBlock().getType()))
source.giveExperience(data);
source.giveExperience(data, event.getBlock().getLocation());
}
}
};

View File

@ -72,7 +72,7 @@ public class RepairItemExperienceSource extends ExperienceSource<ItemStack> {
* durability.
*/
double exp = MMOCore.plugin.smithingManager.getBaseExperience(item.getType()) * Math.max(0, ((Damageable) old.getItemMeta()).getDamage() - ((Damageable) item.getItemMeta()).getDamage()) / 100;
giveExperience(data, (int) exp);
giveExperience(data, (int) exp, null);
}
}
}

View File

@ -44,7 +44,7 @@ public class SmeltItemExperienceSource extends SpecificExperienceSource<ItemStac
PlayerData data = PlayerData.get(player.get());
for (SmeltItemExperienceSource source : getSources())
if (source.matches(data, caught))
source.giveExperience(data);
source.giveExperience(data, event.getBlock().getLocation());
}
}
};

View File

@ -1,5 +1,7 @@
package net.Indyuce.mmocore.api.experience.source.type;
import org.bukkit.Location;
import net.Indyuce.mmocore.api.experience.Profession;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.api.player.profess.PlayerClass;
@ -42,10 +44,10 @@ public abstract class ExperienceSource<T> {
public abstract boolean matches(PlayerData player, T obj);
public void giveExperience(PlayerData player, int amount) {
public void giveExperience(PlayerData player, int amount, Location location) {
if (hasProfession())
player.getCollectionSkills().giveExperience(profession, amount);
player.getCollectionSkills().giveExperience(profession, amount, location == null ? player.getPlayer().getLocation() : location);
else
player.giveExperience(amount);
player.giveExperience(amount, player.getPlayer().getLocation());
}
}

View File

@ -1,5 +1,7 @@
package net.Indyuce.mmocore.api.experience.source.type;
import org.bukkit.Location;
import net.Indyuce.mmocore.api.experience.Profession;
import net.Indyuce.mmocore.api.load.MMOLineConfig;
import net.Indyuce.mmocore.api.math.formula.RandomAmount;
@ -27,7 +29,7 @@ public abstract class SpecificExperienceSource<T> extends ExperienceSource<T> {
return amount.calculateInt();
}
public void giveExperience(PlayerData player) {
giveExperience(player, rollAmount());
public void giveExperience(PlayerData player, Location loc) {
giveExperience(player, rollAmount(), loc);
}
}

View File

@ -14,6 +14,7 @@ import java.util.stream.Collectors;
import org.apache.commons.lang.Validate;
import org.bukkit.Bukkit;
import org.bukkit.Color;
import org.bukkit.Location;
import org.bukkit.OfflinePlayer;
import org.bukkit.Particle;
import org.bukkit.Sound;
@ -470,10 +471,18 @@ public class PlayerData {
}
public void giveExperience(int value) {
giveExperience(value, null);
}
public void giveExperience(int value, Location loc) {
if (profess == null || hasReachedMaxLevel()) {
setExperience(0);
return;
}
// display hologram
if (loc != null && MMOCore.plugin.hologramSupport != null)
MMOCore.plugin.hologramSupport.displayIndicator(loc.add(.5, 1.5, .5), MMOCore.plugin.configManager.getSimpleMessage("exp-hologram", "exp", "" + value).message(), getPlayer());
value = MMOCore.plugin.boosterManager.calculateExp(null, value);
value *= 1 + getStats().getStat(StatType.ADDITIONAL_EXPERIENCE) / 100;

View File

@ -87,7 +87,7 @@ public class Professions {
// display hologram
if (loc != null && MMOCore.plugin.hologramSupport != null)
MMOCore.plugin.hologramSupport.displayIndicator(loc, MMOCore.plugin.configManager.getSimpleMessage("exp-hologram", "exp", "" + value).message(), playerData.getPlayer());
MMOCore.plugin.hologramSupport.displayIndicator(loc.add(.5, 1.5, .5), MMOCore.plugin.configManager.getSimpleMessage("exp-hologram", "exp", "" + value).message(), playerData.getPlayer());
int needed, exp, level;
boolean check = false;

View File

@ -1,5 +1,6 @@
package net.Indyuce.mmocore.api.player.profess;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
@ -7,6 +8,7 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.logging.Level;
import org.apache.commons.lang.Validate;
@ -15,6 +17,10 @@ import org.bukkit.Material;
import org.bukkit.Particle;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import com.mojang.authlib.GameProfile;
import com.mojang.authlib.properties.Property;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.MMOCoreUtils;
@ -31,6 +37,7 @@ import net.Indyuce.mmocore.api.player.stats.StatType;
import net.Indyuce.mmocore.api.skill.Skill;
import net.Indyuce.mmocore.api.skill.Skill.SkillInfo;
import net.Indyuce.mmocore.manager.ClassManager;
import net.Indyuce.mmocore.version.VersionMaterial;
public class PlayerClass {
private final String name, id, fileName;
@ -60,6 +67,26 @@ public class PlayerClass {
name = ChatColor.translateAlternateColorCodes('&', config.getString("display.name"));
icon = MMOCoreUtils.readIcon(config.getString("display.item"));
if(config.contains("display.headtexture")) {
if(icon.getType() == VersionMaterial.PLAYER_HEAD.toMaterial()) {
ItemMeta meta = icon.getItemMeta();
try {
Field profileField = meta.getClass().getDeclaredField("profile");
profileField.setAccessible(true);
GameProfile gp = new GameProfile(UUID.randomUUID(), null);
gp.getProperties().put("textures", new Property("textures", config.getString("display.texture")));
profileField.set(meta, gp);
} catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException | SecurityException exception) {
MMOCore.log(Level.WARNING, "[PlayerClasses:" + id + "] Could not apply playerhead texture: " + exception.getMessage());
}
icon.setItemMeta(meta);
}
else {
MMOCore.log(Level.WARNING, "[PlayerClasses:" + id + "] Could not add player head texture. The item is not a playerhead!");
}
}
for (String string : config.getStringList("display.lore"))
description.add(ChatColor.GRAY + ChatColor.translateAlternateColorCodes('&', string));
for (String string : config.getStringList("display.attribute-lore"))

View File

@ -114,14 +114,10 @@ public class Guild {
public void add(PlayerData player) {
members.add(player);
refreshAttributes();
}
public void remove(PlayerData player) {
members.remove(player);
refreshAttributes();
}
public void forEach(Consumer<? super PlayerData> action) {
@ -131,9 +127,5 @@ public class Guild {
public int count() {
return members.size();
}
public void refreshAttributes() {
members.forEach(member -> refreshAttributes());
}
}
}

View File

@ -20,7 +20,7 @@ public class ExperienceCommandMap extends CommandEnd {
super(parent, "exp");
addFloor(new ActionCommandMap(this, "set", (data, value) -> data.setExperience(value), (professions, profession, value) -> professions.setExperience(profession, value)));
addFloor(new ActionCommandMap(this, "give", (data, value) -> data.giveExperience(value), (professions, profession, value) -> professions.giveExperience(profession, value)));
addFloor(new ActionCommandMap(this, "give", (data, value) -> data.giveExperience(value, data.getPlayer().getLocation()), (professions, profession, value) -> professions.giveExperience(profession, value, professions.getPlayerData().getPlayer().getLocation())));
}
public class ActionCommandMap extends CommandEnd {

View File

@ -32,7 +32,7 @@ public class KillMythicMobExperienceSource extends SpecificExperienceSource<Stri
PlayerData data = PlayerData.get((Player) event.getKiller());
for (KillMythicMobExperienceSource source : getSources())
if (source.matches(data, event.getMobType().getInternalName()))
source.giveExperience(data);
source.giveExperience(data, event.getEntity().getLocation());
}
};
}

View File

@ -83,8 +83,8 @@ public class BlockListener implements Listener {
if (info.hasTriggers() && !block.hasMetadata("player_placed")) {
PlayerData playerData = PlayerData.get(player);
info.getTriggers().forEach(trigger -> trigger.apply(playerData));
if (!block.hasMetadata("player_placed") && info.hasExperience() && MMOCore.plugin.hasHolograms())
MMOCore.plugin.hologramSupport.displayIndicator(block.getLocation().add(.5, 1.5, .5), MMOCore.plugin.configManager.getSimpleMessage("exp-hologram", "exp", "" + called.getGainedExperience().getValue()).message(), player);
/**if (!block.hasMetadata("player_placed") && info.hasExperience() && MMOCore.plugin.hasHolograms())
MMOCore.plugin.hologramSupport.displayIndicator(block.getLocation().add(.5, 1.5, .5), MMOCore.plugin.configManager.getSimpleMessage("exp-hologram", "exp", "" + called.getGainedExperience().getValue()).message(), player);*/
}
/*