1.0.0-SNAPSHOT-U100

+ Started implementing the skill editing aspects in the menu
This commit is contained in:
Charles 2018-12-02 14:25:17 +08:00
parent a51f31e82f
commit 28f9e23625
8 changed files with 317 additions and 30 deletions

View File

@ -4,7 +4,7 @@ stages:
variables:
name: "EpicBosses"
path: "/builds/$CI_PROJECT_PATH"
version: "1"
version: "1.0.0"
build:
stage: build

View File

@ -0,0 +1,80 @@
package com.songoda.epicbosses.handlers;
import com.songoda.epicbosses.entity.BossEntity;
import com.songoda.epicbosses.entity.elements.EntityStatsElement;
import com.songoda.epicbosses.managers.files.BossesFileManager;
import com.songoda.epicbosses.managers.files.SkillsFileManager;
import com.songoda.epicbosses.skills.Skill;
import com.songoda.epicbosses.utils.IHandler;
import com.songoda.epicbosses.utils.ServerUtils;
import com.songoda.epicbosses.utils.panel.base.ISubVariablePanelHandler;
import com.songoda.epicbosses.utils.panel.base.IVariablePanelHandler;
import lombok.Getter;
import lombok.Setter;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import java.util.UUID;
/**
* @author Charles Cullen
* @version 1.0.0
* @since 02-Dec-18
*/
public class SkillDisplayNameHandler implements IHandler {
@Getter private final IVariablePanelHandler<Skill> panelHandler;
@Getter private final SkillsFileManager skillsFileManager;
@Getter private final Player player;
@Getter private final Skill skill;
@Getter @Setter private boolean handled = false;
private Listener listener;
public SkillDisplayNameHandler(Player player, Skill skill, SkillsFileManager skillsFileManager, IVariablePanelHandler<Skill> panelHandler) {
this.skill = skill;
this.player = player;
this.skillsFileManager = skillsFileManager;
this.panelHandler = panelHandler;
this.listener = getListener();
}
@Override
public void handle() {
ServerUtils.get().registerListener(this.listener);
}
private Listener getListener() {
return new Listener() {
@EventHandler
public void onChat(AsyncPlayerChatEvent event) {
Player player = event.getPlayer();
UUID uuid = player.getUniqueId();
if(!uuid.equals(getPlayer().getUniqueId())) return;
if(isHandled()) return;
String input = event.getMessage();
if(input.equalsIgnoreCase("-")) {
input = null;
}
getSkill().setDisplayName(input);
getSkillsFileManager().save();
event.setCancelled(true);
setHandled(true);
finish();
}
};
}
private void finish() {
AsyncPlayerChatEvent.getHandlerList().unregister(this.listener);
getPanelHandler().openFor(getPlayer(), getSkill());
}
}

View File

@ -1,5 +1,6 @@
package com.songoda.epicbosses.managers;
import com.songoda.epicbosses.api.BossAPI;
import com.songoda.epicbosses.entity.BossEntity;
import com.songoda.epicbosses.entity.elements.EntityStatsElement;
import com.songoda.epicbosses.entity.elements.EquipmentElement;
@ -18,6 +19,7 @@ import com.songoda.epicbosses.panel.bosses.text.*;
import com.songoda.epicbosses.panel.bosses.weapons.MainHandEditorPanel;
import com.songoda.epicbosses.panel.bosses.weapons.OffHandEditorPanel;
import com.songoda.epicbosses.panel.handlers.*;
import com.songoda.epicbosses.panel.skills.MainSkillEditorPanel;
import com.songoda.epicbosses.skills.Skill;
import com.songoda.epicbosses.utils.panel.base.ISubVariablePanelHandler;
import com.songoda.epicbosses.utils.panel.base.IVariablePanelHandler;
@ -57,7 +59,7 @@ public class BossPanelManager implements ILoadable, IReloadable {
onTauntTextEditMenu;
@Getter private BossListEditorPanel equipmentListEditMenu, weaponListEditMenu, statisticListEditMenu;
@Getter private IVariablePanelHandler<Skill> mainSkillEditMenu;
@Getter private IVariablePanelHandler<Skill> mainSkillEditMenu, customMessageEditMenu;
private final CustomBosses customBosses;
@ -88,6 +90,8 @@ public class BossPanelManager implements ILoadable, IReloadable {
loadEquipmentEditMenu();
loadWeaponEditMenu();
loadEquipmentEditMenus();
loadSkillEditMenus();
}
@Override
@ -113,6 +117,8 @@ public class BossPanelManager implements ILoadable, IReloadable {
reloadEquipmentEditMenu();
reloadWeaponEditMenu();
reloadEquipmentEditMenus();
reloadSkillEditMenus();
}
public int isItemStackUsed(String name) {
@ -140,6 +146,51 @@ public class BossPanelManager implements ILoadable, IReloadable {
return timesUsed;
}
//---------------------------------------------
//
// S K I L L E D I T P A N E L S
//
//---------------------------------------------
private void loadSkillEditMenus() {
FileConfiguration editor = this.customBosses.getEditor();
PanelBuilder panelBuilder = new PanelBuilder(editor.getConfigurationSection("SkillEditorPanel"));
this.mainSkillEditMenu = new MainSkillEditorPanel(this, panelBuilder, this.customBosses);
this.customMessageEditMenu = new SingleMessageListEditor<Skill>(this, getListMenu("Skill.Main"), this.customBosses) {
@Override
public String getCurrent(Skill object) {
return object.getCustomMessage();
}
@Override
public void updateMessage(Skill object, String newPath) {
object.setCustomMessage(newPath);
BossPanelManager.this.customBosses.getSkillsFileManager().save();
}
@Override
public IVariablePanelHandler<Skill> getParentHolder() {
return getMainSkillEditMenu();
}
@Override
public String getName(Skill object) {
return BossAPI.getSkillName(object);
}
};
}
private void reloadSkillEditMenus() {
FileConfiguration editor = this.customBosses.getEditor();
PanelBuilder panelBuilder = new PanelBuilder(editor.getConfigurationSection("SkillEditorPanel"));
this.mainSkillEditMenu.initializePanel(panelBuilder);
this.customMessageEditMenu.initializePanel(getListMenu("Skill.Main"));
}
//---------------------------------------------
//
// T E X T E D I T P A N E L S
@ -157,7 +208,7 @@ public class BossPanelManager implements ILoadable, IReloadable {
this.onSpawnSubTextEditMenu = new SpawnTextEditorPanel(this, panelBuilder1, this.customBosses);
this.onDeathSubTextEditMenu = new DeathTextEditorPanel(this, panelBuilder2, this.customBosses);
this.mainTauntEditMenu = new TauntTextEditorPanel(this, panelBuilder3, this.customBosses);
this.onSpawnTextEditMenu = new SingleMessageListEditor(this, getListMenu("Boss.Text"), this.customBosses) {
this.onSpawnTextEditMenu = new SingleMessageListEditor<BossEntity>(this, getListMenu("Boss.Text"), this.customBosses) {
@Override
public String getCurrent(BossEntity bossEntity) {
return bossEntity.getMessages().getOnSpawn().getMessage();
@ -172,8 +223,13 @@ public class BossPanelManager implements ILoadable, IReloadable {
public IVariablePanelHandler<BossEntity> getParentHolder() {
return getOnSpawnSubTextEditMenu();
}
@Override
public String getName(BossEntity object) {
return BossAPI.getBossEntityName(object);
}
};
this.onDeathTextEditMenu = new SingleMessageListEditor(this, getListMenu("Boss.Text"), this.customBosses) {
this.onDeathTextEditMenu = new SingleMessageListEditor<BossEntity>(this, getListMenu("Boss.Text"), this.customBosses) {
@Override
public String getCurrent(BossEntity bossEntity) {
return bossEntity.getMessages().getOnDeath().getMessage();
@ -188,8 +244,13 @@ public class BossPanelManager implements ILoadable, IReloadable {
public IVariablePanelHandler<BossEntity> getParentHolder() {
return getOnDeathSubTextEditMenu();
}
@Override
public String getName(BossEntity object) {
return BossAPI.getBossEntityName(object);
}
};
this.onDeathPositionTextEditMenu = new SingleMessageListEditor(this, getListMenu("Boss.Text"), this.customBosses) {
this.onDeathPositionTextEditMenu = new SingleMessageListEditor<BossEntity>(this, getListMenu("Boss.Text"), this.customBosses) {
@Override
public String getCurrent(BossEntity bossEntity) {
return bossEntity.getMessages().getOnDeath().getPositionMessage();
@ -204,6 +265,11 @@ public class BossPanelManager implements ILoadable, IReloadable {
public IVariablePanelHandler<BossEntity> getParentHolder() {
return getOnDeathSubTextEditMenu();
}
@Override
public String getName(BossEntity object) {
return BossAPI.getBossEntityName(object);
}
};
this.onTauntTextEditMenu = new ListMessageListEditor(this, getListMenu("Boss.Text"), this.customBosses) {
@Override

View File

@ -2,7 +2,6 @@ package com.songoda.epicbosses.panel.handlers;
import com.songoda.epicbosses.CustomBosses;
import com.songoda.epicbosses.api.BossAPI;
import com.songoda.epicbosses.entity.BossEntity;
import com.songoda.epicbosses.managers.BossPanelManager;
import com.songoda.epicbosses.managers.files.MessagesFileManager;
import com.songoda.epicbosses.utils.StringUtils;
@ -28,7 +27,7 @@ import java.util.Map;
* @version 1.0.0
* @since 29-Nov-18
*/
public abstract class SingleMessageListEditor extends VariablePanelHandler<BossEntity> {
public abstract class SingleMessageListEditor<T> extends VariablePanelHandler<T> {
private MessagesFileManager messagesFileManager;
private ItemStackConverter itemStackConverter;
@ -42,14 +41,16 @@ public abstract class SingleMessageListEditor extends VariablePanelHandler<BossE
this.messagesFileManager = plugin.getBossMessagesFileManager();
}
public abstract String getCurrent(BossEntity bossEntity);
public abstract String getCurrent(T object);
public abstract void updateMessage(BossEntity bossEntity, String newPath);
public abstract void updateMessage(T object, String newPath);
public abstract IVariablePanelHandler<BossEntity> getParentHolder();
public abstract IVariablePanelHandler<T> getParentHolder();
public abstract String getName(T object);
@Override
public void fillPanel(Panel panel, BossEntity bossEntity) {
public void fillPanel(Panel panel, T object) {
Map<String, List<String>> currentTexts = this.messagesFileManager.getMessagesMap();
List<String> entryList = new ArrayList<>(currentTexts.keySet());
int maxPage = panel.getMaxPage(entryList);
@ -57,28 +58,28 @@ public abstract class SingleMessageListEditor extends VariablePanelHandler<BossE
panel.setOnPageChange(((player, currentPage, requestedPage) -> {
if(requestedPage < 0 || requestedPage > maxPage) return false;
loadPage(panel, requestedPage, currentTexts, entryList, bossEntity);
loadPage(panel, requestedPage, currentTexts, entryList, object);
return true;
}));
loadPage(panel, 0, currentTexts, entryList, bossEntity);
loadPage(panel, 0, currentTexts, entryList, object);
}
@Override
public void openFor(Player player, BossEntity bossEntity) {
public void openFor(Player player, T object) {
Map<String, String> replaceMap = new HashMap<>();
PanelBuilder panelBuilder = getPanelBuilder().cloneBuilder();
replaceMap.put("{name}", BossAPI.getBossEntityName(bossEntity));
replaceMap.put("{name}", getName(object));
panelBuilder.addReplaceData(replaceMap);
Panel panel = panelBuilder.getPanel()
.setDestroyWhenDone(true)
.setCancelClick(true)
.setCancelLowerClick(true)
.setParentPanelHandler(getParentHolder(), bossEntity);
.setParentPanelHandler(getParentHolder(), object);
fillPanel(panel, bossEntity);
fillPanel(panel, object);
panel.openFor(player);
}
@ -88,8 +89,8 @@ public abstract class SingleMessageListEditor extends VariablePanelHandler<BossE
}
private void loadPage(Panel panel, int page, Map<String, List<String>> currentMessages, List<String> entryList, BossEntity bossEntity) {
String current = getCurrent(bossEntity);
private void loadPage(Panel panel, int page, Map<String, List<String>> currentMessages, List<String> entryList, T object) {
String current = getCurrent(object);
panel.loadPage(page, (slot, realisticSlot) -> {
if(slot >= entryList.size()) {
@ -128,9 +129,8 @@ public abstract class SingleMessageListEditor extends VariablePanelHandler<BossE
itemStack.setItemMeta(itemMeta);
panel.setItem(realisticSlot, itemStack, e -> {
updateMessage(bossEntity, name);
this.plugin.getBossesFileManager().save();
loadPage(panel, page, currentMessages, entryList, bossEntity);
updateMessage(object, name);
loadPage(panel, page, currentMessages, entryList, object);
});
}
});

View File

@ -1,17 +1,23 @@
package com.songoda.epicbosses.panel.skills;
import com.songoda.epicbosses.CustomBosses;
import com.songoda.epicbosses.api.BossAPI;
import com.songoda.epicbosses.handlers.SkillDisplayNameHandler;
import com.songoda.epicbosses.managers.BossPanelManager;
import com.songoda.epicbosses.managers.files.SkillsFileManager;
import com.songoda.epicbosses.skills.Skill;
import com.songoda.epicbosses.skills.SkillMode;
import com.songoda.epicbosses.utils.Message;
import com.songoda.epicbosses.utils.NumberUtils;
import com.songoda.epicbosses.utils.panel.Panel;
import com.songoda.epicbosses.utils.panel.base.ClickAction;
import com.songoda.epicbosses.utils.panel.base.handlers.VariablePanelHandler;
import com.songoda.epicbosses.utils.panel.builder.PanelBuilder;
import com.songoda.epicbosses.utils.panel.builder.PanelBuilderCounter;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import java.util.HashMap;
import java.util.Map;
import java.util.*;
/**
* @author Charles Cullen
@ -20,8 +26,12 @@ import java.util.Map;
*/
public class MainSkillEditorPanel extends VariablePanelHandler<Skill> {
public MainSkillEditorPanel(BossPanelManager bossPanelManager, PanelBuilder panelBuilder) {
private SkillsFileManager skillsFileManager;
public MainSkillEditorPanel(BossPanelManager bossPanelManager, PanelBuilder panelBuilder, CustomBosses plugin) {
super(bossPanelManager, panelBuilder);
this.skillsFileManager = plugin.getSkillsFileManager();
}
@Override
@ -59,11 +69,11 @@ public class MainSkillEditorPanel extends VariablePanelHandler<Skill> {
.setCancelLowerClick(true);
PanelBuilderCounter counter = panel.getPanelBuilderCounter();
counter.getSlotsWith("Radius").forEach(slot -> {});
counter.getSlotsWith("Radius").forEach(slot -> panel.setOnClick(slot, getRadiusAction(skill)));
counter.getSlotsWith("CustomData").forEach(slot -> {});
counter.getSlotsWith("Mode").forEach(slot -> {});
counter.getSlotsWith("DisplayName").forEach(slot -> {});
counter.getSlotsWith("CustomMessage").forEach(slot -> {});
counter.getSlotsWith("Mode").forEach(slot -> panel.setOnClick(slot, getModeAction(skill)));
counter.getSlotsWith("DisplayName").forEach(slot -> panel.setOnClick(slot, getDisplayNameAction(skill)));
counter.getSlotsWith("CustomMessage").forEach(slot -> panel.setOnClick(slot, getCustomMessageAction(skill)));
counter.getSlotsWith("Type").forEach(slot -> {});
panel.openFor(player);
@ -81,4 +91,86 @@ public class MainSkillEditorPanel extends VariablePanelHandler<Skill> {
.addSlotCounter("DisplayName")
.addSlotCounter("Type");
}
private ClickAction getTypeAction(Skill skill) {
return event -> {
Player player = (Player) event.getWhoClicked();
};
}
private ClickAction getDisplayNameAction(Skill skill) {
return event -> {
Player player = (Player) event.getWhoClicked();
SkillDisplayNameHandler skillDisplayNameHandler = new SkillDisplayNameHandler(player, skill, this.skillsFileManager, this);
Message.Boss_Skills_SetDisplayName.msg(player);
skillDisplayNameHandler.handle();
player.closeInventory();
};
}
private ClickAction getCustomMessageAction(Skill skill) {
return event -> {
ClickType clickType = event.getClick();
Player player = (Player) event.getWhoClicked();
if(clickType.name().contains("RIGHT")) {
skill.setCustomMessage("");
saveSkill(skill, player);
} else {
this.bossPanelManager.getCustomMessageEditMenu().openFor(player, skill);
}
};
}
private ClickAction getModeAction(Skill skill) {
return event -> {
String current = skill.getMode();
SkillMode skillMode = SkillMode.getCurrent(current);
SkillMode nextMode = skillMode.getNext();
skill.setMode(nextMode.name());
saveSkill(skill, (Player) event.getWhoClicked());
Message.Boss_Skills_SetMode.msg(event.getWhoClicked(), nextMode.name());
};
}
private ClickAction getRadiusAction(Skill skill) {
return event -> {
ClickType clickType = event.getClick();
int radiusToModifyBy = 0;
if(clickType == ClickType.LEFT) {
radiusToModifyBy = 1;
} else if(clickType == ClickType.SHIFT_LEFT) {
radiusToModifyBy = 10;
} else if(clickType == ClickType.RIGHT) {
radiusToModifyBy = -1;
} else if(clickType == ClickType.SHIFT_RIGHT) {
radiusToModifyBy = -10;
}
String modifyValue = radiusToModifyBy > 0? "increased" : "decreased";
Double currentRadius = skill.getRadius();
if(currentRadius == null) currentRadius = 0.0;
double newRadius = currentRadius + radiusToModifyBy;
if(newRadius < 0) {
newRadius = 0;
}
skill.setRadius(newRadius);
saveSkill(skill, (Player) event.getWhoClicked());
Message.Boss_Skills_SetRadius.msg(event.getWhoClicked(), modifyValue, NumberUtils.get().formatDouble(newRadius));
};
}
private void saveSkill(Skill skill, Player player) {
this.skillsFileManager.save();
openFor(player, skill);
}
}

View File

@ -0,0 +1,46 @@
package com.songoda.epicbosses.skills;
/**
* @author Charles Cullen
* @version 1.0.0
* @since 02-Dec-18
*/
public enum SkillMode {
BLANK(0),
ALL(1),
RANDOM(2),
ONE(3),
BOSS(4);
private int rank;
SkillMode(int rank) {
this.rank = rank;
}
public SkillMode getNext() {
return get(this.rank+1);
}
public static SkillMode getCurrent(String input) {
if(input == null || input.isEmpty()) return BLANK;
for(SkillMode skillMode : values()) {
if(skillMode.name().equalsIgnoreCase(input)) return skillMode;
}
return BLANK;
}
private static SkillMode get(int rank) {
for(SkillMode skillMode : values()) {
if(skillMode.rank == rank) {
return skillMode;
}
}
return ALL;
}
}

View File

@ -136,6 +136,9 @@ public enum Message {
Boss_Skills_NoPermission("&c&l(!) &cYou do not have access to this command."),
Boss_Skills_SetChance("&b&lEpicBosses &8» &7You have {0} the overall chance for the skill map to &f{1}%&7."),
Boss_Skills_SetRadius("&b&lEpicBosses &8» &7You have {0} the radius for the skill to &f{1}&7."),
Boss_Skills_SetMode("&b&lEpicBosses &8» &7You have set the skill mode to &f{0}&7."),
Boss_Skills_SetDisplayName("&b&lEpicBosses &8» &7Your next input in to chat will be the display name for the skill. If you enter &f-&7 it will remove/clear the display name of the skill. For color codes use the &f& &7sign."),
Boss_Spawn_NoPermission("&c&l(!) &cYou do not have access to this command."),
Boss_Spawn_InvalidArgs("&c&l(!) &cYou must use &n/boss spawn [name] (location)&c to spawn a boss."),

View File

@ -20,7 +20,7 @@
<properties>
<!--<plugin.version>maven-version-number-SNAPSHOT-U90</plugin.version>-->
<plugin.version>1.0.0-U99</plugin.version>
<plugin.version>1.0.0-U100</plugin.version>
<plugin.name>EpicBosses</plugin.name>
<plugin.main>com.songoda.epicbosses.CustomBosses</plugin.main>
<plugin.author>AMinecraftDev</plugin.author>