1.0.0-SNAPSHOT-U63
+ Added MainBossEditPanel + Added button for toggling editing mode of a boss
This commit is contained in:
parent
8d96806a59
commit
c8243aa82d
|
@ -157,3 +157,86 @@ AddItemsMenu:
|
|||
- '&7of adding the item to the EpicBosses'
|
||||
- '&7database.'
|
||||
Button: Accept
|
||||
MainEditorPanel:
|
||||
name: '&b&l{name} Editor'
|
||||
slots: 54
|
||||
Settings:
|
||||
emptySpaceFiller: true
|
||||
EmptySpaceFiller:
|
||||
type: WHITE_STAINED_GLASS_PANE
|
||||
name: '&7'
|
||||
Items:
|
||||
'12':
|
||||
type: DIAMOND
|
||||
name: '&a&lDrops Manager'
|
||||
lore:
|
||||
- '&7Click here to manage the drop table'
|
||||
- '&7that is attached to this boss.'
|
||||
Button: Drops
|
||||
'14':
|
||||
type: DIAMOND_HELMET
|
||||
name: '&c&lEquipment Manager'
|
||||
lore:
|
||||
- '&7Click here to manage the equipment'
|
||||
- '&7that the boss has equipped.'
|
||||
Button: Equipment
|
||||
'16':
|
||||
type: BONE
|
||||
name: '&a&lTargeting Manager'
|
||||
lore:
|
||||
- '&7Click here to edit how the boss handles'
|
||||
- '&7targeting of players and mobs.'
|
||||
Button: Targeting
|
||||
'22':
|
||||
type: BOW
|
||||
name: '&c&lWeapon Manager'
|
||||
lore:
|
||||
- '&7Click here to manage the weapon(s)'
|
||||
- '&7that the boss has equipped.'
|
||||
Button: Weapon
|
||||
'23':
|
||||
type: BARRIER
|
||||
name: '&c&l!&4&l!&c&l! &4&lWARNING &c&l!&4&l!&c&l!'
|
||||
lore:
|
||||
- '&7While editing is enabled for this boss'
|
||||
- '&7no one will be able to spawn it, nor'
|
||||
- '&7will it spawn naturally.'
|
||||
'24':
|
||||
type: BLAZE_POWDER
|
||||
name: '&c&lSkill Manager'
|
||||
lore:
|
||||
- '&7Click here to manage the assigned'
|
||||
- '&7skill(s) the boss has and their occurrence'
|
||||
- '&7chances.'
|
||||
Button: Skill
|
||||
'32':
|
||||
type: LAPIS_LAZULI
|
||||
name: '&a&lStatistics Manager'
|
||||
lore:
|
||||
- '&7Click here to edit the statistics of the'
|
||||
- '&7boss, including things like: health,'
|
||||
- '&7potion effects, commands on spawn, etc.'
|
||||
Button: Stats
|
||||
'39':
|
||||
type: BOOK
|
||||
name: '&a&lCommand Manager'
|
||||
lore:
|
||||
- '&7Click here to manage the commands that are'
|
||||
- '&7called when the boss spawns, dies, etc.'
|
||||
Button: Command
|
||||
'41':
|
||||
type: LEVER
|
||||
name: '&a&lToggle Boss Editing'
|
||||
lore:
|
||||
- '&7Click here to edit how to toggle the boss'
|
||||
- '&7editing mode.'
|
||||
- '&7'
|
||||
- '&bCurrently: &f{mode}'
|
||||
Button: Editing
|
||||
'43':
|
||||
type: BOOK
|
||||
name: '&a&lText Manager'
|
||||
lore:
|
||||
- '&7Click here to edit the taunts, sayings,'
|
||||
- '&7etc. for this boss.'
|
||||
Button: Text
|
|
@ -37,6 +37,10 @@ public class BossEntity {
|
|||
this.price = price;
|
||||
}
|
||||
|
||||
public String getEditingValue() {
|
||||
return this.editing? "Enabled" : "Disabled";
|
||||
}
|
||||
|
||||
public boolean isCompleteEnoughToSpawn() {
|
||||
if(this.entityStats == null) return false;
|
||||
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
package com.songoda.epicbosses.managers;
|
||||
|
||||
import com.songoda.epicbosses.droptable.DropTable;
|
||||
import com.songoda.epicbosses.entity.BossEntity;
|
||||
import com.songoda.epicbosses.entity.elements.EntityStatsElement;
|
||||
import com.songoda.epicbosses.entity.elements.EquipmentElement;
|
||||
import com.songoda.epicbosses.entity.elements.HandsElement;
|
||||
import com.songoda.epicbosses.panel.bosses.MainBossEditPanel;
|
||||
import com.songoda.epicbosses.utils.panel.base.IVariablePanelHandler;
|
||||
import lombok.Getter;
|
||||
import com.songoda.epicbosses.CustomBosses;
|
||||
import com.songoda.epicbosses.panel.*;
|
||||
|
@ -29,6 +30,8 @@ public class BossPanelManager implements ILoadable, IReloadable {
|
|||
@Getter private IPanelHandler mainMenu, customItems, bosses, autoSpawns, dropTables, customSkills, shopPanel;
|
||||
@Getter private IPanelHandler addItemsMenu;
|
||||
|
||||
@Getter private IVariablePanelHandler<BossEntity> mainBossEditMenu;
|
||||
|
||||
private final CustomBosses customBosses;
|
||||
|
||||
public BossPanelManager(CustomBosses customBosses) {
|
||||
|
@ -47,6 +50,7 @@ public class BossPanelManager implements ILoadable, IReloadable {
|
|||
loadDropTableMenu();
|
||||
|
||||
loadAddItemsMenu();
|
||||
loadMainEditMenu();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -61,6 +65,7 @@ public class BossPanelManager implements ILoadable, IReloadable {
|
|||
reloadDropTable();
|
||||
|
||||
reloadAddItemsMenu();
|
||||
reloadMainEditMenu();
|
||||
}
|
||||
|
||||
public int isItemStackUsed(String name) {
|
||||
|
@ -88,6 +93,24 @@ public class BossPanelManager implements ILoadable, IReloadable {
|
|||
return timesUsed;
|
||||
}
|
||||
|
||||
//---------------------------------------------
|
||||
//
|
||||
// M A I N E D I T P A N E L
|
||||
//
|
||||
//---------------------------------------------
|
||||
|
||||
private void loadMainEditMenu() {
|
||||
PanelBuilder panelBuilder = new PanelBuilder(this.customBosses.getEditor().getConfigurationSection("MainEditorPanel"));
|
||||
|
||||
this.mainBossEditMenu = new MainBossEditPanel(this, panelBuilder, this.customBosses);
|
||||
}
|
||||
|
||||
private void reloadMainEditMenu() {
|
||||
PanelBuilder panelBuilder = new PanelBuilder(this.customBosses.getEditor().getConfigurationSection("MainEditorPanel"));
|
||||
|
||||
this.mainBossEditMenu.initializePanel(panelBuilder);
|
||||
}
|
||||
|
||||
//---------------------------------------------
|
||||
//
|
||||
// A D D I T E M S P A N E L
|
||||
|
|
|
@ -80,8 +80,6 @@ public class AddItemsPanel extends PanelHandler {
|
|||
|
||||
private ClickAction getSelectedSlotAction(PanelBuilderCounter panelBuilderCounter) {
|
||||
return event -> {
|
||||
System.out.println("CALLED 1");
|
||||
|
||||
Player player = (Player) event.getWhoClicked();
|
||||
UUID uuid = player.getUniqueId();
|
||||
|
||||
|
@ -96,8 +94,6 @@ public class AddItemsPanel extends PanelHandler {
|
|||
|
||||
private ClickAction getAcceptAction() {
|
||||
return event -> {
|
||||
System.out.println("CALLED 2");
|
||||
|
||||
Player player = (Player) event.getWhoClicked();
|
||||
UUID uuid = player.getUniqueId();
|
||||
|
||||
|
@ -113,8 +109,6 @@ public class AddItemsPanel extends PanelHandler {
|
|||
|
||||
private ClickAction getCancelAction() {
|
||||
return event -> {
|
||||
System.out.println("CALLED 3");
|
||||
|
||||
Player player = (Player) event.getWhoClicked();
|
||||
UUID uuid = player.getUniqueId();
|
||||
|
||||
|
|
|
@ -80,7 +80,7 @@ public class CustomBossesPanel extends ListPanelHandler {
|
|||
|
||||
panel.setItem(realisticSlot, itemStack, e -> {
|
||||
if(e.getClick() == ClickType.RIGHT || e.getClick() == ClickType.SHIFT_RIGHT) {
|
||||
//TODO
|
||||
this.bossPanelManager.getMainBossEditMenu().openFor((Player) e.getWhoClicked(), entity);
|
||||
} else if(e.getClick() == ClickType.LEFT || e.getClick() == ClickType.SHIFT_LEFT) {
|
||||
ItemStack spawnItem = this.bossEntityManager.getSpawnItem(entity);
|
||||
|
||||
|
|
|
@ -0,0 +1,94 @@
|
|||
package com.songoda.epicbosses.panel.bosses;
|
||||
|
||||
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.BossesFileManager;
|
||||
import com.songoda.epicbosses.utils.Message;
|
||||
import com.songoda.epicbosses.utils.panel.Panel;
|
||||
import com.songoda.epicbosses.utils.panel.base.ClickAction;
|
||||
import com.songoda.epicbosses.utils.panel.base.VariablePanelHandler;
|
||||
import com.songoda.epicbosses.utils.panel.builder.PanelBuilder;
|
||||
import com.songoda.epicbosses.utils.panel.builder.PanelBuilderCounter;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author Charles Cullen
|
||||
* @version 1.0.0
|
||||
* @since 18-Nov-18
|
||||
*/
|
||||
public class MainBossEditPanel extends VariablePanelHandler<BossEntity> {
|
||||
|
||||
private BossesFileManager bossesFileManager;
|
||||
|
||||
public MainBossEditPanel(BossPanelManager bossPanelManager, PanelBuilder panelBuilder, CustomBosses plugin) {
|
||||
super(bossPanelManager, panelBuilder);
|
||||
|
||||
this.bossesFileManager = plugin.getBossesFileManager();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initializePanel(PanelBuilder panelBuilder) {
|
||||
PanelBuilderCounter panelBuilderCounter = panelBuilder.getPanelBuilderCounter();
|
||||
|
||||
panelBuilderCounter
|
||||
.addSlotCounter("Drops")
|
||||
.addSlotCounter("Equipment")
|
||||
.addSlotCounter("Targeting")
|
||||
.addSlotCounter("Weapon")
|
||||
.addSlotCounter("Skill")
|
||||
.addSlotCounter("Stats")
|
||||
.addSlotCounter("Particle")
|
||||
.addSlotCounter("Spawning")
|
||||
.addSlotCounter("Text")
|
||||
.addSlotCounter("Editing")
|
||||
.addSlotCounter("Command");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fillPanel(Panel panel, BossEntity bossEntity) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void openFor(Player player, BossEntity bossEntity) {
|
||||
Map<String, String> replaceMap = new HashMap<>();
|
||||
|
||||
replaceMap.put("{name}", BossAPI.getBossEntityName(bossEntity));
|
||||
replaceMap.put("{mode}", bossEntity.getEditingValue());
|
||||
|
||||
PanelBuilder panelBuilder = getPanelBuilder().cloneBuilder();
|
||||
|
||||
panelBuilder.addReplaceData(replaceMap);
|
||||
|
||||
Panel panel = panelBuilder.getPanel()
|
||||
.setDestroyWhenDone(true)
|
||||
.setCancelClick(true)
|
||||
.setCancelLowerClick(true);
|
||||
PanelBuilderCounter counter = panel.getPanelBuilderCounter();
|
||||
|
||||
counter.getSlotsWith("Editing").forEach(slot -> panel.setOnClick(slot, getEditingAction(bossEntity)));
|
||||
|
||||
panel.openFor(player);
|
||||
}
|
||||
|
||||
private ClickAction getEditingAction(BossEntity bossEntity) {
|
||||
return event -> {
|
||||
Player player = (Player) event.getWhoClicked();
|
||||
|
||||
if(bossEntity.isCompleteEnoughToSpawn()) {
|
||||
bossEntity.setEditing(false);
|
||||
this.bossesFileManager.save();
|
||||
Message.Boss_Edit_Toggled.msg(player, BossAPI.getBossEntityName(bossEntity), bossEntity.getEditingValue());
|
||||
player.closeInventory();
|
||||
} else {
|
||||
Message.Boss_Edit_NotCompleteEnough.msg(player);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
}
|
|
@ -38,6 +38,8 @@ public enum Message {
|
|||
Boss_Edit_NoPermission("&c&l(!) &cYou do not have access to this command."),
|
||||
Boss_Edit_ItemStackHolderNull("&c&l(!) &cThe itemstack name that is provided for the spawn item doesn't exist or wasn't found."),
|
||||
Boss_Edit_CannotSpawn("&c&l(!) &cYou cannot spawn this boss while editing is enabled. If you think this is a mistake please contact an administrator to disable the editing of the boss."),
|
||||
Boss_Edit_Toggled("&b&lEpicBosses &8» &7You have toggled the editing mode for &f{0}&7 to &f{1}&7."),
|
||||
Boss_Edit_NotCompleteEnough("&c&l(!) &cThe boss is not set up enough to be enabled. Please make sure it has: &fA Spawn Item, Entity Type, Health and Position&c before you try and enable the boss."),
|
||||
|
||||
Boss_GiveEgg_NoPermission("&c&l(!) &cYou do not have access to this command."),
|
||||
Boss_GiveEgg_InvalidArgs("&c&l(!) &cYou must use &n/boss giveegg [name] [player] (amount)&c to give an egg."),
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
package com.songoda.epicbosses.utils.panel.base;
|
||||
|
||||
import com.songoda.epicbosses.managers.BossPanelManager;
|
||||
import com.songoda.epicbosses.utils.panel.Panel;
|
||||
import com.songoda.epicbosses.utils.panel.builder.PanelBuilder;
|
||||
|
||||
/**
|
||||
* @author Charles Cullen
|
||||
* @version 1.0.0
|
||||
* @since 18-Nov-18
|
||||
*/
|
||||
public abstract class BasePanelHandler implements IBasicPanelHandler {
|
||||
|
||||
protected final BossPanelManager bossPanelManager;
|
||||
|
||||
private PanelBuilder panelBuilder;
|
||||
protected Panel panel = null;
|
||||
|
||||
public BasePanelHandler(BossPanelManager bossPanelManager, PanelBuilder panelBuilder) {
|
||||
this.bossPanelManager = bossPanelManager;
|
||||
this.panelBuilder = panelBuilder;
|
||||
|
||||
initializePanel(panelBuilder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Panel getPanel() {
|
||||
return this.panel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PanelBuilder getPanelBuilder() {
|
||||
return this.panelBuilder;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
package com.songoda.epicbosses.utils.panel.base;
|
||||
|
||||
import com.songoda.epicbosses.utils.panel.Panel;
|
||||
import com.songoda.epicbosses.utils.panel.builder.PanelBuilder;
|
||||
|
||||
/**
|
||||
* @author Charles Cullen
|
||||
* @version 1.0.0
|
||||
* @since 18-Nov-18
|
||||
*/
|
||||
public interface IBasicPanelHandler {
|
||||
|
||||
PanelBuilder getPanelBuilder();
|
||||
|
||||
Panel getPanel();
|
||||
|
||||
void initializePanel(PanelBuilder panelBuilder);
|
||||
|
||||
}
|
|
@ -9,13 +9,7 @@ import org.bukkit.entity.Player;
|
|||
* @version 1.0.0
|
||||
* @since 10-Oct-18
|
||||
*/
|
||||
public interface IPanelHandler {
|
||||
|
||||
PanelBuilder getPanelBuilder();
|
||||
|
||||
Panel getPanel();
|
||||
|
||||
void initializePanel(PanelBuilder panelBuilder);
|
||||
public interface IPanelHandler extends IBasicPanelHandler {
|
||||
|
||||
void fillPanel(Panel panel);
|
||||
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
package com.songoda.epicbosses.utils.panel.base;
|
||||
|
||||
import com.songoda.epicbosses.utils.panel.Panel;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
/**
|
||||
* @author Charles Cullen
|
||||
* @version 1.0.0
|
||||
* @since 18-Nov-18
|
||||
*/
|
||||
public interface IVariablePanelHandler<Variable> extends IBasicPanelHandler {
|
||||
|
||||
void fillPanel(Panel panel, Variable variable);
|
||||
|
||||
void openFor(Player player, Variable variable);
|
||||
|
||||
}
|
|
@ -1,27 +1,16 @@
|
|||
package com.songoda.epicbosses.utils.panel.base;
|
||||
|
||||
import lombok.Getter;
|
||||
import com.songoda.epicbosses.managers.BossPanelManager;
|
||||
import com.songoda.epicbosses.utils.panel.Panel;
|
||||
import com.songoda.epicbosses.utils.panel.builder.PanelBuilder;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
/**
|
||||
* @author Charles Cullen
|
||||
* @version 1.0.0
|
||||
* @since 10-Oct-18
|
||||
*/
|
||||
public abstract class PanelHandler implements IPanelHandler {
|
||||
|
||||
protected final BossPanelManager bossPanelManager;
|
||||
|
||||
@Getter private PanelBuilder panelBuilder;
|
||||
@Getter protected Panel panel = null;
|
||||
public abstract class PanelHandler extends BasePanelHandler implements IPanelHandler {
|
||||
|
||||
public PanelHandler(BossPanelManager bossPanelManager, PanelBuilder panelBuilder) {
|
||||
this.bossPanelManager = bossPanelManager;
|
||||
this.panelBuilder = panelBuilder;
|
||||
|
||||
initializePanel(panelBuilder);
|
||||
super(bossPanelManager, panelBuilder);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
package com.songoda.epicbosses.utils.panel.base;
|
||||
|
||||
import com.songoda.epicbosses.managers.BossPanelManager;
|
||||
import com.songoda.epicbosses.utils.panel.builder.PanelBuilder;
|
||||
|
||||
/**
|
||||
* @author Charles Cullen
|
||||
* @version 1.0.0
|
||||
* @since 18-Nov-18
|
||||
*/
|
||||
public abstract class VariablePanelHandler<Variable> extends BasePanelHandler implements IVariablePanelHandler<Variable> {
|
||||
|
||||
public VariablePanelHandler(BossPanelManager bossPanelManager, PanelBuilder panelBuilder) {
|
||||
super(bossPanelManager, panelBuilder);
|
||||
}
|
||||
}
|
|
@ -28,7 +28,7 @@ public class PanelBuilder {
|
|||
private final ConfigurationSection configurationSection;
|
||||
private final PanelBuilderSettings panelBuilderSettings;
|
||||
|
||||
@Getter private final PanelBuilderCounter panelBuilderCounter;
|
||||
@Getter private PanelBuilderCounter panelBuilderCounter;
|
||||
|
||||
private Inventory inventory;
|
||||
private int size = 0;
|
||||
|
@ -50,10 +50,26 @@ public class PanelBuilder {
|
|||
return this;
|
||||
}
|
||||
|
||||
public PanelBuilder addReplaceData(Map<String, String> replaceMap) {
|
||||
if(replaceMap != null) this.replaceMap.putAll(replaceMap);
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean isDefaultSlot(int slot) {
|
||||
return defaultSlots.contains(slot);
|
||||
}
|
||||
|
||||
public PanelBuilder cloneBuilder() {
|
||||
PanelBuilder panelBuilder = new PanelBuilder(this.configurationSection, this.replaceMap);
|
||||
|
||||
panelBuilder.inventory = this.inventory;
|
||||
panelBuilder.size = this.size;
|
||||
panelBuilder.defaultSlots.addAll(this.defaultSlots);
|
||||
panelBuilder.panelBuilderCounter = getPanelBuilderCounter().cloneCounter();
|
||||
|
||||
return panelBuilder;
|
||||
}
|
||||
|
||||
public Panel getPanel() {
|
||||
build();
|
||||
|
||||
|
|
|
@ -89,4 +89,17 @@ public class PanelBuilderCounter {
|
|||
return this.specialValuesCounter.getOrDefault(identifier, new HashMap<>());
|
||||
}
|
||||
|
||||
public PanelBuilderCounter cloneCounter() {
|
||||
PanelBuilderCounter clone = new PanelBuilderCounter();
|
||||
|
||||
clone.specialValuesCounter.putAll(this.specialValuesCounter);
|
||||
clone.slotsWithCounter.putAll(this.slotsWithCounter);
|
||||
clone.clickActions.putAll(this.clickActions);
|
||||
clone.buttonCounters.putAll(this.buttonCounters);
|
||||
clone.itemStacks.putAll(this.itemStacks);
|
||||
clone.pageData.putAll(this.pageData);
|
||||
|
||||
return clone;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
2
pom.xml
2
pom.xml
|
@ -19,7 +19,7 @@
|
|||
</modules>
|
||||
|
||||
<properties>
|
||||
<plugin.version>1.0.0-SNAPSHOT-U62</plugin.version>
|
||||
<plugin.version>1.0.0-SNAPSHOT-U63</plugin.version>
|
||||
<plugin.name>EpicBosses</plugin.name>
|
||||
<plugin.main>com.songoda.epicbosses.CustomBosses</plugin.main>
|
||||
<plugin.author>AMinecraftDev</plugin.author>
|
||||
|
|
Loading…
Reference in New Issue