1.0.0-SNAPSHOT-U63

+ Added MainBossEditPanel
+ Added button for toggling editing mode of a boss
This commit is contained in:
AMinecraftDev 2018-11-19 00:48:13 +08:00
parent 8d96806a59
commit c8243aa82d
16 changed files with 329 additions and 30 deletions

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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();

View File

@ -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);

View File

@ -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);
}
};
}
}

View File

@ -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."),

View File

@ -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;
}
}

View File

@ -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);
}

View File

@ -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);

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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();

View File

@ -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;
}
}

View File

@ -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>