mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2025-06-25 10:14:43 +02:00
Whoops I forgot to push these
This commit is contained in:
@ -8,6 +8,8 @@ import com.gmail.nossr50.datatypes.skills.alchemy.PotionStage;
|
||||
import com.gmail.nossr50.util.StringUtils;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.bukkit.boss.BarColor;
|
||||
import org.bukkit.boss.BarStyle;
|
||||
import org.bukkit.entity.EntityType;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@ -245,6 +247,37 @@ public class ExperienceConfig extends AutoUpdateConfigLoader {
|
||||
return config.contains(wildcardString);
|
||||
}
|
||||
|
||||
/*
|
||||
* Experience Bar Stuff
|
||||
*/
|
||||
public BarColor getExperienceBarColor(PrimarySkillType primarySkillType)
|
||||
{
|
||||
String colorValueFromConfig = config.getString("Experience_Bars.Style."+StringUtils.getCapitalized(primarySkillType.toString())+".Color");
|
||||
|
||||
for(BarColor barColor : BarColor.values())
|
||||
{
|
||||
if(barColor.toString().equalsIgnoreCase(colorValueFromConfig))
|
||||
return barColor;
|
||||
}
|
||||
|
||||
//In case the value is invalid
|
||||
return BarColor.WHITE;
|
||||
}
|
||||
|
||||
public BarStyle getExperienceBarStyle(PrimarySkillType primarySkillType)
|
||||
{
|
||||
String colorValueFromConfig = config.getString("Experience_Bars.Style."+StringUtils.getCapitalized(primarySkillType.toString())+".BarStyle");
|
||||
|
||||
for(BarStyle barStyle : BarStyle.values())
|
||||
{
|
||||
if(barStyle.toString().equalsIgnoreCase(colorValueFromConfig))
|
||||
return barStyle;
|
||||
}
|
||||
|
||||
//In case the value is invalid
|
||||
return BarStyle.SOLID;
|
||||
}
|
||||
|
||||
/* Acrobatics */
|
||||
public int getDodgeXPModifier() { return config.getInt("Experience.Acrobatics.Dodge", 120); }
|
||||
public int getRollXPModifier() { return config.getInt("Experience.Acrobatics.Roll", 80); }
|
||||
|
@ -39,6 +39,7 @@ import com.gmail.nossr50.skills.woodcutting.WoodcuttingManager;
|
||||
import com.gmail.nossr50.util.EventUtils;
|
||||
import com.gmail.nossr50.util.Misc;
|
||||
import com.gmail.nossr50.util.Permissions;
|
||||
import com.gmail.nossr50.util.experience.ExperienceBarManager;
|
||||
import com.gmail.nossr50.util.player.NotificationManager;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
||||
@ -65,6 +66,7 @@ public class McMMOPlayer {
|
||||
private PlayerProfile profile;
|
||||
|
||||
private final Map<PrimarySkillType, SkillManager> skillManagers = new HashMap<PrimarySkillType, SkillManager>();
|
||||
private ExperienceBarManager experienceBarManager;
|
||||
|
||||
private Party party;
|
||||
private Party invite;
|
||||
@ -131,6 +133,34 @@ public class McMMOPlayer {
|
||||
for (ToolType toolType : ToolType.values()) {
|
||||
toolMode.put(toolType, false);
|
||||
}
|
||||
|
||||
experienceBarManager = new ExperienceBarManager(this);
|
||||
}
|
||||
|
||||
/*public void hideXpBar(PrimarySkillType primarySkillType)
|
||||
{
|
||||
experienceBarManager.hideExperienceBar(primarySkillType);
|
||||
}*/
|
||||
|
||||
public void processPostXpEvent(PrimarySkillType primarySkillType, mcMMO plugin)
|
||||
{
|
||||
updateXPBar(primarySkillType, plugin);
|
||||
}
|
||||
|
||||
public void updateXPBar(PrimarySkillType primarySkillType, mcMMO plugin)
|
||||
{
|
||||
/*if(experienceBarManager == null)
|
||||
experienceBarManager = new ExperienceBarManager(this);*/
|
||||
|
||||
experienceBarManager.updateExperienceBar(primarySkillType, plugin);
|
||||
}
|
||||
|
||||
public double getProgressInCurrentSkillLevel(PrimarySkillType primarySkillType)
|
||||
{
|
||||
double currentXP = profile.getSkillXpLevel(primarySkillType);
|
||||
double maxXP = profile.getXpToLevel(primarySkillType);
|
||||
|
||||
return (currentXP / maxXP);
|
||||
}
|
||||
|
||||
public AcrobaticsManager getAcrobaticsManager() {
|
||||
|
@ -8,6 +8,7 @@ import com.gmail.nossr50.datatypes.skills.XPGainReason;
|
||||
import com.gmail.nossr50.events.experience.McMMOPlayerLevelUpEvent;
|
||||
import com.gmail.nossr50.events.experience.McMMOPlayerXpGainEvent;
|
||||
import com.gmail.nossr50.events.skills.abilities.McMMOPlayerAbilityActivateEvent;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.util.player.UserManager;
|
||||
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
||||
import org.bukkit.entity.Player;
|
||||
@ -16,6 +17,14 @@ import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
|
||||
public class SelfListener implements Listener {
|
||||
//Used in task scheduling and other things
|
||||
private final mcMMO plugin;
|
||||
|
||||
public SelfListener(mcMMO plugin)
|
||||
{
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
public void onPlayerLevelUp(McMMOPlayerLevelUpEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
@ -44,12 +53,23 @@ public class SelfListener implements Listener {
|
||||
|
||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||
public void onPlayerXpGain(McMMOPlayerXpGainEvent event) {
|
||||
if (event.getXpGainReason() == XPGainReason.COMMAND)
|
||||
return;
|
||||
Player player = event.getPlayer();
|
||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
|
||||
PrimarySkillType primarySkillType = event.getSkill();
|
||||
|
||||
if (event.getXpGainReason() == XPGainReason.COMMAND)
|
||||
{
|
||||
//Update the XP Bar
|
||||
mcMMOPlayer.processPostXpEvent(primarySkillType, plugin);
|
||||
return;
|
||||
}
|
||||
|
||||
int threshold = ExperienceConfig.getInstance().getDiminishedReturnsThreshold(primarySkillType);
|
||||
|
||||
if (threshold <= 0 || !ExperienceConfig.getInstance().getDiminishedReturnsEnabled()) {
|
||||
// Diminished returns is turned off
|
||||
//Update the XP Bar
|
||||
mcMMOPlayer.processPostXpEvent(primarySkillType, plugin);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -59,9 +79,6 @@ public class SelfListener implements Listener {
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
|
||||
|
||||
if (primarySkillType.isChildSkill()) {
|
||||
return;
|
||||
}
|
||||
@ -95,5 +112,9 @@ public class SelfListener implements Listener {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//Update the XP Bar
|
||||
if(!event.isCancelled())
|
||||
mcMMOPlayer.processPostXpEvent(primarySkillType, plugin);
|
||||
}
|
||||
}
|
||||
|
@ -441,7 +441,7 @@ public class mcMMO extends JavaPlugin {
|
||||
pluginManager.registerEvents(new BlockListener(this), this);
|
||||
pluginManager.registerEvents(new EntityListener(this), this);
|
||||
pluginManager.registerEvents(new InventoryListener(this), this);
|
||||
pluginManager.registerEvents(new SelfListener(), this);
|
||||
pluginManager.registerEvents(new SelfListener(this), this);
|
||||
pluginManager.registerEvents(new WorldListener(this), this);
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,69 @@
|
||||
package com.gmail.nossr50.util.experience;
|
||||
|
||||
public class ExperienceBar {
|
||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.runnables.skills.ExperienceBarHideTask;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* ExperienceBarManager handles displaying and updating mcMMO experience bars for players
|
||||
* Each ExperienceBarManager only manages a single player
|
||||
*/
|
||||
public class ExperienceBarManager {
|
||||
private McMMOPlayer mcMMOPlayer;
|
||||
|
||||
HashMap<PrimarySkillType, ExperienceBarWrapper> experienceBars;
|
||||
HashMap<PrimarySkillType, ExperienceBarHideTask> experienceBarHideTaskHashMap;
|
||||
|
||||
public ExperienceBarManager(McMMOPlayer mcMMOPlayer)
|
||||
{
|
||||
//Init map
|
||||
experienceBars = new HashMap<>();
|
||||
experienceBarHideTaskHashMap = new HashMap<>();
|
||||
|
||||
this.mcMMOPlayer = mcMMOPlayer;
|
||||
}
|
||||
|
||||
public void updateExperienceBar(PrimarySkillType primarySkillType, mcMMO plugin)
|
||||
{
|
||||
//Init Bar
|
||||
if(experienceBars.get(primarySkillType) == null)
|
||||
experienceBars.put(primarySkillType, new ExperienceBarWrapper(primarySkillType, mcMMOPlayer));
|
||||
|
||||
//Get Bar
|
||||
ExperienceBarWrapper experienceBarWrapper = experienceBars.get(primarySkillType);
|
||||
|
||||
//Update Progress
|
||||
experienceBarWrapper.setProgress(mcMMOPlayer.getProgressInCurrentSkillLevel(primarySkillType));
|
||||
|
||||
//Show Bar
|
||||
experienceBarWrapper.showExperienceBar();
|
||||
|
||||
//Setup Hide Bar Task
|
||||
if(experienceBarHideTaskHashMap.get(primarySkillType) != null)
|
||||
{
|
||||
experienceBarHideTaskHashMap.get(primarySkillType).cancel();
|
||||
scheduleHideTask(primarySkillType, plugin);
|
||||
} else {
|
||||
scheduleHideTask(primarySkillType, plugin);
|
||||
}
|
||||
}
|
||||
|
||||
private void scheduleHideTask(PrimarySkillType primarySkillType, mcMMO plugin) {
|
||||
ExperienceBarHideTask experienceBarHideTask = new ExperienceBarHideTask(this, mcMMOPlayer, primarySkillType);
|
||||
experienceBarHideTask.runTaskLater(plugin, 20*2);
|
||||
experienceBarHideTaskHashMap.put(primarySkillType, experienceBarHideTask);
|
||||
}
|
||||
|
||||
public void hideExperienceBar(PrimarySkillType primarySkillType)
|
||||
{
|
||||
experienceBars.get(primarySkillType).hideExperienceBar();
|
||||
}
|
||||
|
||||
public void clearTask(PrimarySkillType primarySkillType)
|
||||
{
|
||||
experienceBarHideTaskHashMap.remove(primarySkillType);
|
||||
}
|
||||
}
|
||||
|
@ -1,149 +1,139 @@
|
||||
package com.gmail.nossr50.util.experience;
|
||||
|
||||
import com.gmail.nossr50.config.experience.ExperienceConfig;
|
||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||
import com.gmail.nossr50.util.StringUtils;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.boss.*;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* A visual representation of a players skill level progress for a PrimarySkillType
|
||||
*/
|
||||
public class ExperienceBar {
|
||||
public class ExperienceBarWrapper {
|
||||
|
||||
private final PrimarySkillType primarySkillType; //Primary Skill
|
||||
protected String experienceBarTitle; //Name Shown Above XP Bar
|
||||
protected BarColor barColor; //Color of the XP Bar
|
||||
protected BarStyle barStyle;
|
||||
protected Player player;
|
||||
protected double progress;
|
||||
protected boolean isVisible;
|
||||
private BossBar bossBar;
|
||||
private final Server server;
|
||||
protected final McMMOPlayer mcMMOPlayer;
|
||||
private int lastLevelUpdated;
|
||||
|
||||
public ExperienceBar(PrimarySkillType primarySkillType, Player player)
|
||||
/*
|
||||
* This is stored to help optimize updating the title
|
||||
*/
|
||||
protected String niceSkillName;
|
||||
protected String title;
|
||||
|
||||
public ExperienceBarWrapper(PrimarySkillType primarySkillType, McMMOPlayer mcMMOPlayer)
|
||||
{
|
||||
this.player = player;
|
||||
this.mcMMOPlayer = mcMMOPlayer;
|
||||
this.server = mcMMOPlayer.getPlayer().getServer(); //Might not be good for bungee to do this
|
||||
this.primarySkillType = primarySkillType;
|
||||
experienceBarTitle = StringUtils.getCapitalized(primarySkillType.getName());
|
||||
barColor = ExperienceConfig.getInstance().getExperienceBarColor(primarySkillType);
|
||||
barStyle = BarStyle.SOLID;
|
||||
isVisible = false;
|
||||
progress = 0.0D;
|
||||
title = "";
|
||||
lastLevelUpdated = 0;
|
||||
|
||||
//These vars are stored to help reduce operations involving strings
|
||||
niceSkillName = StringUtils.getCapitalized(primarySkillType.toString());
|
||||
|
||||
//Create the bar
|
||||
initBar();
|
||||
}
|
||||
|
||||
private void initBar()
|
||||
{
|
||||
title = getTitleTemplate();
|
||||
createBossBar();
|
||||
}
|
||||
|
||||
public void updateTitle() {
|
||||
title = getTitleTemplate();
|
||||
bossBar.setTitle(title);
|
||||
}
|
||||
|
||||
private String getTitleTemplate() {
|
||||
return niceSkillName + " Lv." + ChatColor.GOLD + getLevel();
|
||||
}
|
||||
|
||||
private int getLevel() {
|
||||
return mcMMOPlayer.getSkillLevel(primarySkillType);
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return experienceBarTitle;
|
||||
return bossBar.getTitle();
|
||||
}
|
||||
|
||||
public void setTitle(String s) {
|
||||
experienceBarTitle = s;
|
||||
bossBar.setTitle(s);
|
||||
}
|
||||
|
||||
public BarColor getColor() {
|
||||
return barColor;
|
||||
return bossBar.getColor();
|
||||
}
|
||||
|
||||
public void setColor(BarColor barColor) {
|
||||
this.barColor = barColor;
|
||||
bossBar.setColor(barColor);
|
||||
}
|
||||
|
||||
|
||||
public BarStyle getStyle() {
|
||||
//TODO: Add config for style
|
||||
return barStyle;
|
||||
return bossBar.getStyle();
|
||||
}
|
||||
|
||||
|
||||
public void setStyle(BarStyle barStyle) {
|
||||
this.barStyle = barStyle;
|
||||
bossBar.setStyle(barStyle);
|
||||
}
|
||||
|
||||
|
||||
public void removeFlag(BarFlag barFlag) {
|
||||
//Do nothing
|
||||
}
|
||||
|
||||
|
||||
public void addFlag(BarFlag barFlag) {
|
||||
//Do nothing
|
||||
}
|
||||
|
||||
|
||||
public boolean hasFlag(BarFlag barFlag) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public void setProgress(double v) {
|
||||
//Clamp progress between 0.00 -> 1.00
|
||||
|
||||
//Clamp Values
|
||||
if(v < 0)
|
||||
progress = 0.0D;
|
||||
else if(progress > 1)
|
||||
progress = 1.0D;
|
||||
else progress = v;
|
||||
}
|
||||
bossBar.setProgress(0.0D);
|
||||
|
||||
else if(v > 1)
|
||||
bossBar.setProgress(1.0D);
|
||||
else
|
||||
bossBar.setProgress(v);
|
||||
|
||||
//Every time progress updates we need to check for a title update
|
||||
if(getLevel() != lastLevelUpdated)
|
||||
{
|
||||
updateTitle();
|
||||
lastLevelUpdated = getLevel();
|
||||
}
|
||||
}
|
||||
|
||||
public double getProgress() {
|
||||
return progress;
|
||||
return bossBar.getProgress();
|
||||
}
|
||||
|
||||
|
||||
public void addPlayer(Player player) {
|
||||
//Do nothing
|
||||
}
|
||||
|
||||
|
||||
public void removePlayer(Player player) {
|
||||
//Do nothing
|
||||
}
|
||||
|
||||
|
||||
public void removeAll() {
|
||||
//Do nothing
|
||||
}
|
||||
|
||||
|
||||
public List<Player> getPlayers() {
|
||||
List<Player> players = new ArrayList<>();
|
||||
players.add(player);
|
||||
return players;
|
||||
return bossBar.getPlayers();
|
||||
}
|
||||
|
||||
|
||||
public void setVisible(boolean b) {
|
||||
isVisible = b;
|
||||
|
||||
if(isVisible)
|
||||
showExperienceBar();
|
||||
}
|
||||
|
||||
|
||||
public boolean isVisible() {
|
||||
return isVisible;
|
||||
return bossBar.isVisible();
|
||||
}
|
||||
|
||||
public void hideExperienceBar()
|
||||
{
|
||||
bossBar.setVisible(false);
|
||||
}
|
||||
|
||||
public void showExperienceBar()
|
||||
{
|
||||
player.getServer().createBossBar()
|
||||
bossBar.setVisible(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
/*public NamespacedKey getKey()
|
||||
{
|
||||
return bossBar
|
||||
}*/
|
||||
|
||||
public void show() {
|
||||
//Do nothing
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
|
||||
public void hide() {
|
||||
//Do nothing
|
||||
private void createBossBar()
|
||||
{
|
||||
bossBar = mcMMOPlayer.getPlayer().getServer().createBossBar(title, ExperienceConfig.getInstance().getExperienceBarColor(primarySkillType), ExperienceConfig.getInstance().getExperienceBarStyle(primarySkillType));
|
||||
bossBar.addPlayer(mcMMOPlayer.getPlayer());
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user