forked from Upstream/mmocore
- 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:
parent
7b7b35e4a1
commit
d7c2d300ba
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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"))
|
||||||
|
@ -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());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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 {
|
||||||
|
@ -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());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -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);*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user