mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-06-23 16:16:17 +02:00
finished page system.
This commit is contained in:
parent
21c39421b9
commit
a30f471c6a
9 changed files with 95 additions and 37 deletions
|
|
@ -1,4 +1,4 @@
|
||||||
package xyz.alexcrea.cuanvil.gui.config.openable;
|
package xyz.alexcrea.cuanvil.gui.config.global;
|
||||||
|
|
||||||
import com.github.stefvanschie.inventoryframework.gui.GuiItem;
|
import com.github.stefvanschie.inventoryframework.gui.GuiItem;
|
||||||
import com.github.stefvanschie.inventoryframework.pane.PatternPane;
|
import com.github.stefvanschie.inventoryframework.pane.PatternPane;
|
||||||
|
|
@ -10,7 +10,6 @@ import org.bukkit.Material;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
import xyz.alexcrea.cuanvil.config.ConfigHolder;
|
import xyz.alexcrea.cuanvil.config.ConfigHolder;
|
||||||
import xyz.alexcrea.cuanvil.gui.MainConfigGui;
|
|
||||||
import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui;
|
import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui;
|
||||||
import xyz.alexcrea.cuanvil.gui.config.settings.BoolSettingsGui;
|
import xyz.alexcrea.cuanvil.gui.config.settings.BoolSettingsGui;
|
||||||
import xyz.alexcrea.cuanvil.gui.config.settings.IntSettingsGui;
|
import xyz.alexcrea.cuanvil.gui.config.settings.IntSettingsGui;
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package xyz.alexcrea.cuanvil.gui.config.openable;
|
package xyz.alexcrea.cuanvil.gui.config.global;
|
||||||
|
|
||||||
import com.github.stefvanschie.inventoryframework.gui.GuiItem;
|
import com.github.stefvanschie.inventoryframework.gui.GuiItem;
|
||||||
import com.github.stefvanschie.inventoryframework.gui.type.ChestGui;
|
import com.github.stefvanschie.inventoryframework.gui.type.ChestGui;
|
||||||
|
|
@ -16,7 +16,6 @@ import org.bukkit.inventory.meta.ItemMeta;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import xyz.alexcrea.cuanvil.config.ConfigHolder;
|
import xyz.alexcrea.cuanvil.config.ConfigHolder;
|
||||||
import xyz.alexcrea.cuanvil.group.EnchantConflictGroup;
|
import xyz.alexcrea.cuanvil.group.EnchantConflictGroup;
|
||||||
import xyz.alexcrea.cuanvil.gui.MainConfigGui;
|
|
||||||
import xyz.alexcrea.cuanvil.gui.config.settings.subsetting.EnchantConflictSubSettingGui;
|
import xyz.alexcrea.cuanvil.gui.config.settings.subsetting.EnchantConflictSubSettingGui;
|
||||||
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions;
|
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions;
|
||||||
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems;
|
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems;
|
||||||
|
|
@ -36,11 +35,11 @@ public class EnchantConflictGui extends ChestGui {
|
||||||
private final HashMap<EnchantConflictGroup, EnchantConflictSubSettingGui> conflictGuiMap;
|
private final HashMap<EnchantConflictGroup, EnchantConflictSubSettingGui> conflictGuiMap;
|
||||||
|
|
||||||
private EnchantConflictGui() {
|
private EnchantConflictGui() {
|
||||||
super(6, "§eConflict Config", CustomAnvil.instance);
|
super(6, "Conflict Config", CustomAnvil.instance);
|
||||||
this.conflictGuiMap = new HashMap<>();
|
this.conflictGuiMap = new HashMap<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
private OutlinePane filledEnchant;
|
private OutlinePane firstPage;
|
||||||
private ArrayList<OutlinePane> pages;
|
private ArrayList<OutlinePane> pages;
|
||||||
private HashMap<UUID, Integer> pageMap;
|
private HashMap<UUID, Integer> pageMap;
|
||||||
private PatternPane backgroundPane;
|
private PatternPane backgroundPane;
|
||||||
|
|
@ -69,8 +68,8 @@ public class EnchantConflictGui extends ChestGui {
|
||||||
this.pageMap = new HashMap<>();
|
this.pageMap = new HashMap<>();
|
||||||
|
|
||||||
// enchant item panel
|
// enchant item panel
|
||||||
this.filledEnchant = creatEmptyPage();
|
this.firstPage = creatEmptyPage();
|
||||||
this.pages.add(this.filledEnchant);
|
this.pages.add(this.firstPage);
|
||||||
|
|
||||||
prepareOtherValues();
|
prepareOtherValues();
|
||||||
reloadValues();
|
reloadValues();
|
||||||
|
|
@ -82,19 +81,33 @@ public class EnchantConflictGui extends ChestGui {
|
||||||
private void prepareOtherValues() {
|
private void prepareOtherValues() {
|
||||||
//TODO item x2
|
//TODO item x2
|
||||||
this.goLeftItem = new GuiItem(new ItemStack(Material.PAPER), event -> {
|
this.goLeftItem = new GuiItem(new ItemStack(Material.PAPER), event -> {
|
||||||
UUID playerUUID = event.getWhoClicked().getUniqueId();
|
HumanEntity viewer = event.getWhoClicked();
|
||||||
int page =this.pageMap.getOrDefault(event.getWhoClicked().getUniqueId(), 0);
|
UUID playerUUID = viewer.getUniqueId();
|
||||||
|
int page =this.pageMap.getOrDefault(playerUUID, 0);
|
||||||
this.pageMap.put(playerUUID, page-1);
|
this.pageMap.put(playerUUID, page-1);
|
||||||
|
|
||||||
show(event.getWhoClicked());
|
ItemStack cursor = viewer.getItemOnCursor();
|
||||||
|
viewer.setItemOnCursor(new ItemStack(Material.AIR));
|
||||||
|
|
||||||
|
viewer.closeInventory();// Hacky trick to make the inventory update properly
|
||||||
|
show(viewer);
|
||||||
|
|
||||||
|
viewer.setItemOnCursor(cursor);
|
||||||
}, CustomAnvil.instance);
|
}, CustomAnvil.instance);
|
||||||
|
|
||||||
this.goRightItem = new GuiItem(new ItemStack(Material.PAPER), event -> {
|
this.goRightItem = new GuiItem(new ItemStack(Material.PAPER), event -> {
|
||||||
UUID playerUUID = event.getWhoClicked().getUniqueId();
|
HumanEntity viewer = event.getWhoClicked();
|
||||||
int page = pageMap.getOrDefault(event.getWhoClicked().getUniqueId(), 0);
|
UUID playerUUID = viewer.getUniqueId();
|
||||||
|
int page = pageMap.getOrDefault(playerUUID, 0);
|
||||||
this.pageMap.put(playerUUID, page+1);
|
this.pageMap.put(playerUUID, page+1);
|
||||||
|
|
||||||
show(event.getWhoClicked());
|
ItemStack cursor = viewer.getItemOnCursor();
|
||||||
|
viewer.setItemOnCursor(new ItemStack(Material.AIR));
|
||||||
|
|
||||||
|
viewer.closeInventory();// Hacky trick to make the inventory update properly
|
||||||
|
show(viewer);
|
||||||
|
|
||||||
|
viewer.setItemOnCursor(cursor);
|
||||||
}, CustomAnvil.instance);
|
}, CustomAnvil.instance);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -110,7 +123,9 @@ public class EnchantConflictGui extends ChestGui {
|
||||||
public void reloadValues(){
|
public void reloadValues(){
|
||||||
this.conflictGuiMap.forEach((conflict, gui) -> gui.cleanUnused());
|
this.conflictGuiMap.forEach((conflict, gui) -> gui.cleanUnused());
|
||||||
this.conflictGuiMap.clear();
|
this.conflictGuiMap.clear();
|
||||||
this.filledEnchant.clear();
|
this.firstPage.clear();
|
||||||
|
this.pages.clear();
|
||||||
|
this.pages.add(this.firstPage);
|
||||||
|
|
||||||
for (EnchantConflictGroup conflict : ConfigHolder.CONFLICT_HOLDER.getConflictManager().getConflictList()) {
|
for (EnchantConflictGroup conflict : ConfigHolder.CONFLICT_HOLDER.getConflictManager().getConflictList()) {
|
||||||
updateValueForConflict(conflict, false);
|
updateValueForConflict(conflict, false);
|
||||||
|
|
@ -143,7 +158,7 @@ public class EnchantConflictGui extends ChestGui {
|
||||||
guiItem.setAction(GuiGlobalActions.openGuiAction(gui));
|
guiItem.setAction(GuiGlobalActions.openGuiAction(gui));
|
||||||
|
|
||||||
this.conflictGuiMap.put(conflict, gui);
|
this.conflictGuiMap.put(conflict, gui);
|
||||||
this.filledEnchant.addItem(guiItem);
|
addToPage(guiItem);
|
||||||
}else{
|
}else{
|
||||||
// replace item with the updated one
|
// replace item with the updated one
|
||||||
guiItem = gui.getParentItemForThisGui();
|
guiItem = gui.getParentItemForThisGui();
|
||||||
|
|
@ -161,11 +176,55 @@ public class EnchantConflictGui extends ChestGui {
|
||||||
EnchantConflictSubSettingGui gui = this.conflictGuiMap.get(conflict);
|
EnchantConflictSubSettingGui gui = this.conflictGuiMap.get(conflict);
|
||||||
if(gui == null) return;
|
if(gui == null) return;
|
||||||
|
|
||||||
this.filledEnchant.removeItem(gui.getParentItemForThisGui());
|
|
||||||
this.conflictGuiMap.remove(conflict);
|
this.conflictGuiMap.remove(conflict);
|
||||||
|
removeFromPage(gui.getParentItemForThisGui());
|
||||||
|
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void addToPage(GuiItem guiItem) {
|
||||||
|
// Get first available page or create one
|
||||||
|
OutlinePane page = this.pages.get(this.pages.size()-1);
|
||||||
|
if(page.getItems().size() >= 5*9){
|
||||||
|
page = creatEmptyPage();
|
||||||
|
this.pages.add(page);
|
||||||
|
}
|
||||||
|
|
||||||
|
page.addItem(guiItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void removeFromPage(GuiItem guiItem) {
|
||||||
|
// get item page
|
||||||
|
OutlinePane page = null;
|
||||||
|
int pageID = 0;
|
||||||
|
while(pageID < this.pages.size()){
|
||||||
|
OutlinePane tempPage = this.pages.get(pageID++);
|
||||||
|
if(tempPage.getItems().contains(guiItem)){
|
||||||
|
page = tempPage;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(page == null){// Why...
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
removeFromPage(page, pageID, guiItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void removeFromPage(OutlinePane page, int pageID, GuiItem guiItem) {
|
||||||
|
page.removeItem(guiItem);
|
||||||
|
|
||||||
|
// There is now a slot available, let fill it if possible
|
||||||
|
if(pageID < this.pages.size() - 1){
|
||||||
|
OutlinePane newPage = this.pages.get(pageID+1);
|
||||||
|
GuiItem newItem = newPage.getItems().get(0);
|
||||||
|
removeFromPage(newPage, pageID+1, newItem);
|
||||||
|
}else if(pageID > 0 && page.getItems().isEmpty()){
|
||||||
|
this.pages.remove(pageID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public int getPlayerPageID(UUID uuid){
|
public int getPlayerPageID(UUID uuid){
|
||||||
int pageId = this.pageMap.getOrDefault(uuid, 0);
|
int pageId = this.pageMap.getOrDefault(uuid, 0);
|
||||||
if(pageId >= this.pages.size()){
|
if(pageId >= this.pages.size()){
|
||||||
|
|
@ -176,14 +235,15 @@ public class EnchantConflictGui extends ChestGui {
|
||||||
|
|
||||||
public void placeArrow(int page){
|
public void placeArrow(int page){
|
||||||
// Place left arrow
|
// Place left arrow
|
||||||
|
addPane(this.backgroundPane);
|
||||||
if(page > 0){
|
if(page > 0){
|
||||||
this.backgroundPane.bindItem('R', this.goLeftItem);
|
this.backgroundPane.bindItem('L', this.goLeftItem);
|
||||||
}else{
|
}else{
|
||||||
this.backgroundPane.bindItem('L', GuiSharedConstant.SECONDARY_BACKGROUND_ITEM);
|
this.backgroundPane.bindItem('L', GuiSharedConstant.SECONDARY_BACKGROUND_ITEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Place right arrow
|
// Place right arrow
|
||||||
if(page < pages.size()){
|
if(page < pages.size()-1){
|
||||||
this.backgroundPane.bindItem('R', this.goRightItem);
|
this.backgroundPane.bindItem('R', this.goRightItem);
|
||||||
}else{
|
}else{
|
||||||
this.backgroundPane.bindItem('R', GuiSharedConstant.SECONDARY_BACKGROUND_ITEM);
|
this.backgroundPane.bindItem('R', GuiSharedConstant.SECONDARY_BACKGROUND_ITEM);
|
||||||
|
|
@ -195,12 +255,14 @@ public class EnchantConflictGui extends ChestGui {
|
||||||
int pageID = getPlayerPageID(humanEntity.getUniqueId());
|
int pageID = getPlayerPageID(humanEntity.getUniqueId());
|
||||||
OutlinePane page = this.pages.get(pageID);
|
OutlinePane page = this.pages.get(pageID);
|
||||||
|
|
||||||
|
getPanes().clear();
|
||||||
|
|
||||||
// display the page arrow pane
|
// display the page arrow pane
|
||||||
placeArrow(pageID);
|
placeArrow(pageID);
|
||||||
|
// and add actual page
|
||||||
addPane(page);
|
addPane(page);
|
||||||
|
|
||||||
super.show(humanEntity);
|
super.show(humanEntity);
|
||||||
getPanes().remove(page);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -209,13 +271,14 @@ public class EnchantConflictGui extends ChestGui {
|
||||||
int pageID = getPlayerPageID(event.getWhoClicked().getUniqueId());
|
int pageID = getPlayerPageID(event.getWhoClicked().getUniqueId());
|
||||||
OutlinePane page = this.pages.get(pageID);
|
OutlinePane page = this.pages.get(pageID);
|
||||||
|
|
||||||
|
getPanes().clear();
|
||||||
|
|
||||||
// set the page arrow pane
|
// set the page arrow pane
|
||||||
placeArrow(pageID);
|
placeArrow(pageID);
|
||||||
|
// and add actual page
|
||||||
// use the clicked page
|
|
||||||
addPane(page);
|
addPane(page);
|
||||||
|
|
||||||
super.click(event);
|
super.click(event);
|
||||||
getPanes().remove(page);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package xyz.alexcrea.cuanvil.gui.config.openable;
|
package xyz.alexcrea.cuanvil.gui.config.global;
|
||||||
|
|
||||||
import com.github.stefvanschie.inventoryframework.gui.GuiItem;
|
import com.github.stefvanschie.inventoryframework.gui.GuiItem;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package xyz.alexcrea.cuanvil.gui.config.openable;
|
package xyz.alexcrea.cuanvil.gui.config.global;
|
||||||
|
|
||||||
import com.github.stefvanschie.inventoryframework.gui.GuiItem;
|
import com.github.stefvanschie.inventoryframework.gui.GuiItem;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package xyz.alexcrea.cuanvil.gui;
|
package xyz.alexcrea.cuanvil.gui.config.global;
|
||||||
|
|
||||||
import com.github.stefvanschie.inventoryframework.gui.GuiItem;
|
import com.github.stefvanschie.inventoryframework.gui.GuiItem;
|
||||||
import com.github.stefvanschie.inventoryframework.gui.type.ChestGui;
|
import com.github.stefvanschie.inventoryframework.gui.type.ChestGui;
|
||||||
|
|
@ -8,10 +8,6 @@ import io.delilaheve.CustomAnvil;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
import xyz.alexcrea.cuanvil.gui.config.openable.BasicConfigGui;
|
|
||||||
import xyz.alexcrea.cuanvil.gui.config.openable.EnchantConflictGui;
|
|
||||||
import xyz.alexcrea.cuanvil.gui.config.openable.EnchantCostConfigGui;
|
|
||||||
import xyz.alexcrea.cuanvil.gui.config.openable.EnchantLimitConfigGui;
|
|
||||||
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions;
|
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions;
|
||||||
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems;
|
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems;
|
||||||
|
|
||||||
|
|
@ -18,7 +18,7 @@ import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui;
|
||||||
import xyz.alexcrea.cuanvil.gui.config.ConfirmActionGui;
|
import xyz.alexcrea.cuanvil.gui.config.ConfirmActionGui;
|
||||||
import xyz.alexcrea.cuanvil.gui.config.SelectEnchantmentContainer;
|
import xyz.alexcrea.cuanvil.gui.config.SelectEnchantmentContainer;
|
||||||
import xyz.alexcrea.cuanvil.gui.config.SelectGroupContainer;
|
import xyz.alexcrea.cuanvil.gui.config.SelectGroupContainer;
|
||||||
import xyz.alexcrea.cuanvil.gui.config.openable.EnchantConflictGui;
|
import xyz.alexcrea.cuanvil.gui.config.global.EnchantConflictGui;
|
||||||
import xyz.alexcrea.cuanvil.gui.config.settings.EnchantSelectSettingGui;
|
import xyz.alexcrea.cuanvil.gui.config.settings.EnchantSelectSettingGui;
|
||||||
import xyz.alexcrea.cuanvil.gui.config.settings.GroupSelectSettingGui;
|
import xyz.alexcrea.cuanvil.gui.config.settings.GroupSelectSettingGui;
|
||||||
import xyz.alexcrea.cuanvil.gui.config.settings.IntSettingsGui;
|
import xyz.alexcrea.cuanvil.gui.config.settings.IntSettingsGui;
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ import com.github.stefvanschie.inventoryframework.pane.PatternPane;
|
||||||
import com.github.stefvanschie.inventoryframework.pane.util.Pattern;
|
import com.github.stefvanschie.inventoryframework.pane.util.Pattern;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.enchantments.Enchantment;
|
import org.bukkit.enchantments.Enchantment;
|
||||||
import xyz.alexcrea.cuanvil.gui.MainConfigGui;
|
import xyz.alexcrea.cuanvil.gui.config.global.MainConfigGui;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import org.bukkit.command.Command
|
||||||
import org.bukkit.command.CommandExecutor
|
import org.bukkit.command.CommandExecutor
|
||||||
import org.bukkit.command.CommandSender
|
import org.bukkit.command.CommandSender
|
||||||
import org.bukkit.entity.HumanEntity
|
import org.bukkit.entity.HumanEntity
|
||||||
import xyz.alexcrea.cuanvil.gui.MainConfigGui
|
import xyz.alexcrea.cuanvil.gui.config.global.MainConfigGui
|
||||||
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions
|
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions
|
||||||
|
|
||||||
class EditConfigExecutor : CommandExecutor {
|
class EditConfigExecutor : CommandExecutor {
|
||||||
|
|
|
||||||
|
|
@ -5,9 +5,9 @@ import org.bukkit.command.Command
|
||||||
import org.bukkit.command.CommandExecutor
|
import org.bukkit.command.CommandExecutor
|
||||||
import org.bukkit.command.CommandSender
|
import org.bukkit.command.CommandSender
|
||||||
import xyz.alexcrea.cuanvil.config.ConfigHolder
|
import xyz.alexcrea.cuanvil.config.ConfigHolder
|
||||||
import xyz.alexcrea.cuanvil.gui.config.openable.BasicConfigGui
|
import xyz.alexcrea.cuanvil.gui.config.global.BasicConfigGui
|
||||||
import xyz.alexcrea.cuanvil.gui.config.openable.EnchantCostConfigGui
|
import xyz.alexcrea.cuanvil.gui.config.global.EnchantCostConfigGui
|
||||||
import xyz.alexcrea.cuanvil.gui.config.openable.EnchantLimitConfigGui
|
import xyz.alexcrea.cuanvil.gui.config.global.EnchantLimitConfigGui
|
||||||
import xyz.alexcrea.cuanvil.util.MetricsUtil
|
import xyz.alexcrea.cuanvil.util.MetricsUtil
|
||||||
|
|
||||||
class ReloadExecutor : CommandExecutor {
|
class ReloadExecutor : CommandExecutor {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue