- 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()); // 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; double exp = 0;
for (Entry<Enchantment, Integer> entry : ench.entrySet()) for (Entry<Enchantment, Integer> entry : ench.entrySet())
exp += MMOCore.plugin.enchantManager.getBaseExperience(entry.getKey()) * entry.getValue(); 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()); PlayerData data = PlayerData.get(event.getPlayer());
for (FishItemExperienceSource source : getSources()) for (FishItemExperienceSource source : getSources())
if (source.matches(data, caught)) 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()) for (KillMobExperienceSource source : getSources())
if (source.matches(data, event.getTarget())) 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; continue;
if (source.matches(data, event.getBlock().getType())) 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()) { for (PlaceBlockExperienceSource source : getSources()) {
if (source.matches(data, event.getBlock().getType())) 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. * durability.
*/ */
double exp = MMOCore.plugin.smithingManager.getBaseExperience(item.getType()) * Math.max(0, ((Damageable) old.getItemMeta()).getDamage() - ((Damageable) item.getItemMeta()).getDamage()) / 100; 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()); PlayerData data = PlayerData.get(player.get());
for (SmeltItemExperienceSource source : getSources()) for (SmeltItemExperienceSource source : getSources())
if (source.matches(data, caught)) 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; package net.Indyuce.mmocore.api.experience.source.type;
import org.bukkit.Location;
import net.Indyuce.mmocore.api.experience.Profession; import net.Indyuce.mmocore.api.experience.Profession;
import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.api.player.profess.PlayerClass; 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 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()) if (hasProfession())
player.getCollectionSkills().giveExperience(profession, amount); player.getCollectionSkills().giveExperience(profession, amount, location == null ? player.getPlayer().getLocation() : location);
else else
player.giveExperience(amount); player.giveExperience(amount, player.getPlayer().getLocation());
} }
} }

View File

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

View File

@ -14,6 +14,7 @@ import java.util.stream.Collectors;
import org.apache.commons.lang.Validate; import org.apache.commons.lang.Validate;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Color; import org.bukkit.Color;
import org.bukkit.Location;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.Particle; import org.bukkit.Particle;
import org.bukkit.Sound; import org.bukkit.Sound;
@ -470,11 +471,19 @@ public class PlayerData {
} }
public void giveExperience(int value) { public void giveExperience(int value) {
giveExperience(value, null);
}
public void giveExperience(int value, Location loc) {
if (profess == null || hasReachedMaxLevel()) { if (profess == null || hasReachedMaxLevel()) {
setExperience(0); setExperience(0);
return; 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 = MMOCore.plugin.boosterManager.calculateExp(null, value);
value *= 1 + getStats().getStat(StatType.ADDITIONAL_EXPERIENCE) / 100; value *= 1 + getStats().getStat(StatType.ADDITIONAL_EXPERIENCE) / 100;

View File

@ -87,7 +87,7 @@ public class Professions {
// display hologram // display hologram
if (loc != null && MMOCore.plugin.hologramSupport != null) 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; int needed, exp, level;
boolean check = false; boolean check = false;

View File

@ -1,5 +1,6 @@
package net.Indyuce.mmocore.api.player.profess; package net.Indyuce.mmocore.api.player.profess;
import java.lang.reflect.Field;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
@ -7,6 +8,7 @@ import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.UUID;
import java.util.logging.Level; import java.util.logging.Level;
import org.apache.commons.lang.Validate; import org.apache.commons.lang.Validate;
@ -15,6 +17,10 @@ import org.bukkit.Material;
import org.bukkit.Particle; import org.bukkit.Particle;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.inventory.ItemStack; 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.MMOCore;
import net.Indyuce.mmocore.MMOCoreUtils; 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;
import net.Indyuce.mmocore.api.skill.Skill.SkillInfo; import net.Indyuce.mmocore.api.skill.Skill.SkillInfo;
import net.Indyuce.mmocore.manager.ClassManager; import net.Indyuce.mmocore.manager.ClassManager;
import net.Indyuce.mmocore.version.VersionMaterial;
public class PlayerClass { public class PlayerClass {
private final String name, id, fileName; private final String name, id, fileName;
@ -60,6 +67,26 @@ public class PlayerClass {
name = ChatColor.translateAlternateColorCodes('&', config.getString("display.name")); name = ChatColor.translateAlternateColorCodes('&', config.getString("display.name"));
icon = MMOCoreUtils.readIcon(config.getString("display.item")); 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")) for (String string : config.getStringList("display.lore"))
description.add(ChatColor.GRAY + ChatColor.translateAlternateColorCodes('&', string)); description.add(ChatColor.GRAY + ChatColor.translateAlternateColorCodes('&', string));
for (String string : config.getStringList("display.attribute-lore")) for (String string : config.getStringList("display.attribute-lore"))

View File

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

View File

@ -20,7 +20,7 @@ public class ExperienceCommandMap extends CommandEnd {
super(parent, "exp"); super(parent, "exp");
addFloor(new ActionCommandMap(this, "set", (data, value) -> data.setExperience(value), (professions, profession, value) -> professions.setExperience(profession, value))); 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 { public class ActionCommandMap extends CommandEnd {

View File

@ -32,7 +32,7 @@ public class KillMythicMobExperienceSource extends SpecificExperienceSource<Stri
PlayerData data = PlayerData.get((Player) event.getKiller()); PlayerData data = PlayerData.get((Player) event.getKiller());
for (KillMythicMobExperienceSource source : getSources()) for (KillMythicMobExperienceSource source : getSources())
if (source.matches(data, event.getMobType().getInternalName())) 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")) { if (info.hasTriggers() && !block.hasMetadata("player_placed")) {
PlayerData playerData = PlayerData.get(player); PlayerData playerData = PlayerData.get(player);
info.getTriggers().forEach(trigger -> trigger.apply(playerData)); info.getTriggers().forEach(trigger -> trigger.apply(playerData));
if (!block.hasMetadata("player_placed") && info.hasExperience() && MMOCore.plugin.hasHolograms()) /**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); MMOCore.plugin.hologramSupport.displayIndicator(block.getLocation().add(.5, 1.5, .5), MMOCore.plugin.configManager.getSimpleMessage("exp-hologram", "exp", "" + called.getGainedExperience().getValue()).message(), player);*/
} }
/* /*