1.0.0-SNAPSHOT-U149

+ Finished implementing the Drop DropTable Panels
+ Improved the handling of MainDropTableEditor
This commit is contained in:
Charles 2018-12-29 22:22:38 +08:00
parent c9e055f4b9
commit 25bcf2e8ad
9 changed files with 339 additions and 17 deletions

1
TODO
View File

@ -1,4 +1,3 @@
01:00 -> Drop - Has a button for Rewards List (with chances), button for RandomDrops, button for MaxDrops (1hr)
01:00 -> Give - Is a list panel with the positions and a button for adding a new position (1hr)
00:30 -> Is a list panel of reward sections, button to add a new section
00:30 -> Panel with Items button, Commands button, maxDrops button, maxCommands button, randomDrops button, randomCommands button, requiredPercentage button

View File

@ -2100,7 +2100,7 @@ SprayRewardsListEditMenu:
name: '&e&l&m<-&e&l Previous Page'
lore:
- '&7Click here to go to the previous'
- '&7page of special settings.'
- '&7page of rewards.'
PreviousPage: true
'50':
type: EMERALD_BLOCK
@ -2115,7 +2115,7 @@ SprayRewardsListEditMenu:
name: '&e&lNext Page &e&l&m->'
lore:
- '&7Click here to go to the next'
- '&7page of special settings.'
- '&7page of rewards.'
NextPage: true
'52':
type: GLASS_PANE
@ -2169,7 +2169,7 @@ SprayNewRewardEditMenu:
name: '&e&l&m<-&e&l Previous Page'
lore:
- '&7Click here to go to the previous'
- '&7page of special settings.'
- '&7page of itemstacks.'
PreviousPage: true
'50':
type: GLASS_PANE
@ -2179,7 +2179,7 @@ SprayNewRewardEditMenu:
name: '&e&lNext Page &e&l&m->'
lore:
- '&7Click here to go to the next'
- '&7page of special settings.'
- '&7page of itemstacks.'
NextPage: true
'52':
type: GLASS_PANE
@ -2290,6 +2290,179 @@ DropDropTableMainEditMenu:
- '&bRight Click &8» &f-1'
- '&bShift Right-Click &8» &f-10'
Button: MaxDrops
'9':
type: REDSTONE
name: '&e&lGo Back'
lore:
- '&7Click here to go back.'
DropRewardsListEditMenu:
name: '&b&l{name} DropTable'
slots: 54
Settings:
backButton: true
fillTo: 45
Buttons:
backButton: 54
Items:
'46':
type: BOOK
name: '&c&lDrop Rewards Guide'
lore:
- '&7Here you can adjust the rewards for'
- '&7the skill with the drop layout. To'
- '&7adjust the chance of a section or to'
- '&7remove a section, then all you have'
- '&7to do is click on the section you''d'
- '&7like to modify and then click the'
- '&7corresponding button.'
- '&7To add a new section click on the'
- '&7emerald block in the bottom middle of'
- '&7the menu in between the page buttons.'
'47':
type: GLASS_PANE
name: '&7'
'48':
type: GLASS_PANE
name: '&7'
'49':
type: ARROW
name: '&e&l&m<-&e&l Previous Page'
lore:
- '&7Click here to go to the previous'
- '&7page of rewards.'
PreviousPage: true
'50':
type: EMERALD_BLOCK
name: '&b&lAdd a New Reward Section'
lore:
- '&7Click here if you would like to add'
- '&7a new reward section to this drop'
- '&7table.'
Button: NewReward
'51':
type: ARROW
name: '&e&lNext Page &e&l&m->'
lore:
- '&7Click here to go to the next'
- '&7page of rewards.'
NextPage: true
'52':
type: GLASS_PANE
name: '&7'
'53':
type: GLASS_PANE
name: '&7'
'54':
type: REDSTONE
name: '&cClick here to go back'
lore:
- '&7Click this button to go back to'
- '&7the drop table main edit menu.'
DropNewRewardEditMenu:
name: '&b&lNew Reward for DropTable'
slots: 54
Settings:
backButton: true
fillTo: 45
Buttons:
backButton: 54
Items:
'46':
type: BOOK
name: '&c&lNew Drop Reward Guide'
lore:
- '&7Once you click an item within this'
- '&7menu it will create a new reward'
- '&7section with that selected item'
- '&7to the drop table you were working'
- '&7on. From there you can adjust the'
- '&7chance for it to be sprayed.'
- '&7'
- '&c&lWARNING'
- '&7At this moment you cannot have'
- '&7two sections for the same item,'
- '&7an easy way to bypass this is to'
- '&7add a new Item with the same'
- '&7itemstack, therefore giving it'
- '&7a new name, and allowing for'
- '&7another new section of the same'
- '&7item.'
'47':
type: GLASS_PANE
name: '&7'
'48':
type: GLASS_PANE
name: '&7'
'49':
type: ARROW
name: '&e&l&m<-&e&l Previous Page'
lore:
- '&7Click here to go to the previous'
- '&7page of itemstacks.'
PreviousPage: true
'50':
type: GLASS_PANE
name: '&7'
'51':
type: ARROW
name: '&e&lNext Page &e&l&m->'
lore:
- '&7Click here to go to the next'
- '&7page of itemstacks.'
NextPage: true
'52':
type: GLASS_PANE
name: '&7'
'53':
type: GLASS_PANE
name: '&7'
'54':
type: REDSTONE
name: '&cClick here to go back'
lore:
- '&7Click this button to go back to'
- '&7the drop table reward list menu.'
DropRewardMainEditMenu:
name: '&b&l{name} DropTable'
slots: 9
Settings:
backButton: true
emptySpaceFiller: true
EmptySpaceFiller:
type: WHITE_STAINED_GLASS_PANE
name: '&7'
Buttons:
backButton: 9
Items:
'3':
type: GUNPOWDER
name: '&e&lSelected ItemStack'
lore:
- '&bCurrently: &f{itemStack}'
- '&7This is the selected itemStack for this'
- '&7reward section.'
'4':
type: EMERALD
name: '&e&lChance'
lore:
- '&bCurrently: &f{chance}'
- '&7Click here to modify the chance of this'
- '&7reward '
- '&7'
- '&bLeft Click &8» &f+1%'
- '&bShift Left-Click &8» &f+0.1%'
- '&7'
- '&bRight Click &8» &f-1%'
- '&bShift Right-Click &8» &f-0.1%'
Button: Chance
'5':
type: BARRIER
name: '&e&lClick here to remove'
lore:
- '&7Click here to remove this rewards section.'
- '&7You can always re-create this section if'
- '&7was a mistake.'
Button: Remove
'9':
type: REDSTONE
name: '&e&lGo Back'

View File

@ -64,17 +64,11 @@ public class MainDropTableEditorPanel extends VariablePanelHandler<DropTable> {
Player player = (Player) event.getWhoClicked();
if(dropTableType.equalsIgnoreCase("SPRAY")) {
SprayTableElement sprayTableElement = dropTable.getSprayTableData();
this.bossPanelManager.getSprayDropTableMainEditMenu().openFor(player, dropTable, sprayTableElement);
this.bossPanelManager.getSprayDropTableMainEditMenu().openFor(player, dropTable, dropTable.getSprayTableData());
} else if(dropTableType.equalsIgnoreCase("GIVE")) {
GiveTableElement giveTableElement = dropTable.getGiveTableData();
this.bossPanelManager.getGiveDropTableMainEditMenu().openFor(player, dropTable, giveTableElement);
this.bossPanelManager.getGiveDropTableMainEditMenu().openFor(player, dropTable, dropTable.getGiveTableData());
} else if(dropTableType.equalsIgnoreCase("DROP")) {
DropTableElement dropTableElement = dropTable.getDropTableData();
this.bossPanelManager.getDropDropTableMainEditMenu().openFor(player, dropTable, dropTableElement);
this.bossPanelManager.getDropDropTableMainEditMenu().openFor(player, dropTable, dropTable.getDropTableData());
} else {
Debug.FAILED_TO_FIND_DROP_TABLE_TYPE.debug(dropTableType);
}

View File

@ -5,7 +5,6 @@ import com.songoda.epicbosses.CustomBosses;
import com.songoda.epicbosses.api.BossAPI;
import com.songoda.epicbosses.droptable.DropTable;
import com.songoda.epicbosses.droptable.elements.DropTableElement;
import com.songoda.epicbosses.droptable.elements.SprayTableElement;
import com.songoda.epicbosses.managers.BossPanelManager;
import com.songoda.epicbosses.utils.Message;
import com.songoda.epicbosses.utils.NumberUtils;

View File

@ -1,13 +1,23 @@
package com.songoda.epicbosses.panel.droptables.types.drop;
import com.songoda.epicbosses.CustomBosses;
import com.songoda.epicbosses.api.BossAPI;
import com.songoda.epicbosses.droptable.DropTable;
import com.songoda.epicbosses.droptable.elements.DropTableElement;
import com.songoda.epicbosses.managers.BossPanelManager;
import com.songoda.epicbosses.managers.files.ItemsFileManager;
import com.songoda.epicbosses.utils.Message;
import com.songoda.epicbosses.utils.itemstack.holder.ItemStackHolder;
import com.songoda.epicbosses.utils.panel.Panel;
import com.songoda.epicbosses.utils.panel.base.handlers.SubVariablePanelHandler;
import com.songoda.epicbosses.utils.panel.builder.PanelBuilder;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @author Charles Cullen
@ -16,22 +26,79 @@ import org.bukkit.entity.Player;
*/
public class DropNewRewardEditorPanel extends SubVariablePanelHandler<DropTable, DropTableElement> {
private ItemsFileManager itemsFileManager;
private CustomBosses plugin;
public DropNewRewardEditorPanel(BossPanelManager bossPanelManager, PanelBuilder panelBuilder, CustomBosses plugin) {
super(bossPanelManager, panelBuilder);
this.itemsFileManager = plugin.getItemStackManager();
this.plugin = plugin;
}
@Override
public void fillPanel(Panel panel, DropTable dropTable, DropTableElement dropTableElement) {
Map<String, ItemStackHolder> itemStacks = this.itemsFileManager.getItemStackHolders();
List<String> currentKeys = new ArrayList<>(dropTableElement.getDropRewards().keySet());
List<String> filteredKeys = getFilteredKeys(itemStacks, currentKeys);
int maxPage = panel.getMaxPage(filteredKeys);
panel.setOnPageChange(((player, currentPage, requestedPage) -> {
if(requestedPage < 0 || requestedPage > maxPage) return false;
loadPage(panel, requestedPage, dropTable, dropTableElement, filteredKeys, itemStacks);
return true;
}));
loadPage(panel, 0, dropTable, dropTableElement, filteredKeys, itemStacks);
}
@Override
public void openFor(Player player, DropTable dropTable, DropTableElement dropTableElement) {
Panel panel = getPanelBuilder().getPanel()
.setParentPanelHandler(this.bossPanelManager.getDropRewardListEditMenu(), dropTable, dropTableElement);
fillPanel(panel, dropTable, dropTableElement);
panel.openFor(player);
}
@Override
public void initializePanel(PanelBuilder panelBuilder) {
}
private void loadPage(Panel panel, int page, DropTable dropTable, DropTableElement dropTableElement, List<String> filteredKeys, Map<String, ItemStackHolder> itemStacks) {
panel.loadPage(page, (slot, realisticSlot) -> {
if(slot >= filteredKeys.size()) {
panel.setItem(realisticSlot, new ItemStack(Material.AIR), e->{});
} else {
String name = filteredKeys.get(slot);
ItemStackHolder itemStackHolder = itemStacks.get(name);
ItemStack itemStack = this.itemsFileManager.getItemStackConverter().from(itemStackHolder);
panel.setItem(realisticSlot, itemStack, event -> {
Map<String, Double> currentRewards = dropTableElement.getDropRewards();
currentRewards.put(name, 50.0);
dropTable.setRewards(BossAPI.convertObjectToJsonObject(dropTableElement));
this.plugin.getDropTableFileManager().save();
this.bossPanelManager.getDropRewardMainEditMenu().openFor((Player) event.getWhoClicked(), dropTable, dropTableElement, name);
Message.Boss_DropTable_DropAddedNewReward.msg(event.getWhoClicked(), BossAPI.getDropTableName(dropTable));
});
}
});
}
private List<String> getFilteredKeys(Map<String, ItemStackHolder> itemStacks, List<String> currentKeys) {
List<String> filteredList = new ArrayList<>();
itemStacks.keySet().forEach(string -> {
if(currentKeys.contains(string)) return;
filteredList.add(string);
});
return filteredList;
}
}

View File

@ -1,12 +1,24 @@
package com.songoda.epicbosses.panel.droptables.types.drop;
import com.songoda.epicbosses.CustomBosses;
import com.songoda.epicbosses.api.BossAPI;
import com.songoda.epicbosses.droptable.DropTable;
import com.songoda.epicbosses.droptable.elements.DropTableElement;
import com.songoda.epicbosses.droptable.elements.SprayTableElement;
import com.songoda.epicbosses.managers.BossPanelManager;
import com.songoda.epicbosses.managers.files.DropTableFileManager;
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.SubSubVariablePanelHandler;
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;
/**
* @author Charles Cullen
@ -15,17 +27,93 @@ import org.bukkit.entity.Player;
*/
public class DropRewardMainEditorPanel extends SubSubVariablePanelHandler<DropTable, DropTableElement, String> {
private DropTableFileManager dropTableFileManager;
public DropRewardMainEditorPanel(BossPanelManager bossPanelManager, PanelBuilder panelBuilder, CustomBosses plugin) {
super(bossPanelManager, panelBuilder);
this.dropTableFileManager = plugin.getDropTableFileManager();
}
@Override
public void openFor(Player player, DropTable dropTable, DropTableElement dropTableElement, String s) {
PanelBuilder panelBuilder = getPanelBuilder().cloneBuilder();
Map<String, String> replaceMap = new HashMap<>();
Double chance = dropTableElement.getDropRewards().get(s);
if(chance == null) chance = 50.0;
replaceMap.put("{chance}", NumberUtils.get().formatDouble(chance));
replaceMap.put("{itemStack}", s);
panelBuilder.addReplaceData(replaceMap);
PanelBuilderCounter panelBuilderCounter = panelBuilder.getPanelBuilderCounter();
Panel panel = panelBuilder.getPanel()
.setParentPanelHandler(this.bossPanelManager.getDropRewardListEditMenu(), dropTable, dropTableElement);
panelBuilderCounter.getSlotsWith("Chance").forEach(slot -> panel.setOnClick(slot, getChanceAction(dropTable, dropTableElement, s)));
panelBuilderCounter.getSlotsWith("Remove").forEach(slot -> panel.setOnClick(slot, getRemoveAction(dropTable, dropTableElement, s)));
panel.openFor(player);
}
@Override
public void initializePanel(PanelBuilder panelBuilder) {
}
private ClickAction getChanceAction(DropTable dropTable, DropTableElement dropTableElement, String name) {
return event -> {
ClickType clickType = event.getClick();
double amountToModifyBy;
if(clickType == ClickType.SHIFT_LEFT) {
amountToModifyBy = 0.1;
} else if(clickType == ClickType.RIGHT) {
amountToModifyBy = -1.0;
} else if(clickType == ClickType.SHIFT_RIGHT) {
amountToModifyBy = -0.1;
} else {
amountToModifyBy = 1.0;
}
String modifyValue = amountToModifyBy > 0? "increased" : "decreased";
Map<String, Double> rewards = dropTableElement.getDropRewards();
double currentValue = rewards.getOrDefault(name, 50.0);
double newValue = currentValue + amountToModifyBy;
if(newValue < 0) {
newValue = 0;
}
if(newValue > 100) {
newValue = 100;
}
rewards.put(name, newValue);
dropTableElement.setDropRewards(rewards);
save(dropTable, dropTableElement);
openFor((Player) event.getWhoClicked(), dropTable, dropTableElement, name);
Message.Boss_DropTable_DropRewardChance.msg(event.getWhoClicked(), modifyValue, BossAPI.getDropTableName(dropTable), NumberUtils.get().formatDouble(newValue));
};
}
private ClickAction getRemoveAction(DropTable dropTable, DropTableElement dropTableElement, String name) {
return event -> {
Map<String, Double> current = dropTableElement.getDropRewards();
current.remove(name);
dropTableElement.setDropRewards(current);
save(dropTable, dropTableElement);
Message.Boss_DropTable_DropRewardRemoved.msg(event.getWhoClicked());
this.bossPanelManager.getDropRewardListEditMenu().openFor((Player) event.getWhoClicked(), dropTable, dropTableElement);
};
}
private void save(DropTable dropTable, DropTableElement dropTableElement) {
dropTable.setRewards(BossAPI.convertObjectToJsonObject(dropTableElement));
this.dropTableFileManager.save();
}
}

View File

@ -4,7 +4,6 @@ import com.songoda.epicbosses.CustomBosses;
import com.songoda.epicbosses.api.BossAPI;
import com.songoda.epicbosses.droptable.DropTable;
import com.songoda.epicbosses.droptable.elements.DropTableElement;
import com.songoda.epicbosses.droptable.elements.SprayTableElement;
import com.songoda.epicbosses.managers.BossPanelManager;
import com.songoda.epicbosses.managers.files.ItemsFileManager;
import com.songoda.epicbosses.utils.NumberUtils;

View File

@ -41,6 +41,9 @@ public enum Message {
Boss_DropTable_SprayAddedNewReward("&b&lEpicBosses &8» &7You have added a new reward to the drop table &f{0}&7. Now opening the editing panel for the new reward."),
Boss_DropTable_SprayRewardRemoved("&b&lEpicBosses &8» &7You have removed the reward section from the spray drop table."),
Boss_DropTable_SprayRewardChance("&b&lEpicBosses &8» &7You have {0} the chance for the reward section for &f{1}&7 to &f{2}%&7."),
Boss_DropTable_DropAddedNewReward("&b&lEpicBosses &8» &7You have added a new reward to the drop table &f{0}&7. Now opening the editing panel for the new reward."),
Boss_DropTable_DropRewardChance("&b&lEpicBosses &8» &7You have {0} the chance for the reward section for &f{1}&7 to &f{2}%&7."),
Boss_DropTable_DropRewardRemoved("&b&lEpicBosses &8» &7You have removed the reward section from the drop drop table."),
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."),

View File

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