Finished custom item for the conflcit config gui.

Fixed multiple issue.
This commit is contained in:
alexcrea 2024-03-31 00:51:58 +01:00
parent 081266accf
commit 1b83c8db81
5 changed files with 60 additions and 20 deletions

View file

@ -62,6 +62,7 @@ public abstract class AbstractEnchantConfigGui<T extends AbstractSettingGui.Sett
@Override @Override
public void updateGuiValues() { public void updateGuiValues() {
// probably not the most efficient but hey ! it do the work // probably not the most efficient but hey ! it do the work
// TODO optimise one day.. maybe // TODO optimise one day.. maybe

View file

@ -81,8 +81,8 @@ public class EnchantConflictGui extends ChestGui {
private GuiItem goLeftItem; private GuiItem goLeftItem;
private GuiItem goRightItem; private GuiItem goRightItem;
private void prepareOtherValues() { private void prepareOtherValues() {
//TODO item x2 // Left item creation for consumer & bind
this.goLeftItem = new GuiItem(new ItemStack(Material.PAPER), event -> { this.goLeftItem = new GuiItem(new ItemStack(Material.RED_TERRACOTTA), event -> {
HumanEntity viewer = event.getWhoClicked(); HumanEntity viewer = event.getWhoClicked();
UUID playerUUID = viewer.getUniqueId(); UUID playerUUID = viewer.getUniqueId();
int page = this.pageMap.getOrDefault(playerUUID, 0); int page = this.pageMap.getOrDefault(playerUUID, 0);
@ -91,13 +91,13 @@ public class EnchantConflictGui extends ChestGui {
ItemStack cursor = viewer.getItemOnCursor(); ItemStack cursor = viewer.getItemOnCursor();
viewer.setItemOnCursor(new ItemStack(Material.AIR)); viewer.setItemOnCursor(new ItemStack(Material.AIR));
viewer.closeInventory();// Hacky trick to make the inventory update properly
show(viewer); show(viewer);
viewer.setItemOnCursor(cursor); viewer.setItemOnCursor(cursor);
}, CustomAnvil.instance); }, CustomAnvil.instance);
this.goRightItem = new GuiItem(new ItemStack(Material.PAPER), event -> { // Right item creation for consumer & bind
this.goRightItem = new GuiItem(new ItemStack(Material.GREEN_TERRACOTTA), event -> {
HumanEntity viewer = event.getWhoClicked(); HumanEntity viewer = event.getWhoClicked();
UUID playerUUID = viewer.getUniqueId(); UUID playerUUID = viewer.getUniqueId();
int page = pageMap.getOrDefault(playerUUID, 0); int page = pageMap.getOrDefault(playerUUID, 0);
@ -106,16 +106,22 @@ public class EnchantConflictGui extends ChestGui {
ItemStack cursor = viewer.getItemOnCursor(); ItemStack cursor = viewer.getItemOnCursor();
viewer.setItemOnCursor(new ItemStack(Material.AIR)); viewer.setItemOnCursor(new ItemStack(Material.AIR));
viewer.closeInventory();// Hacky trick to make the inventory update properly
show(viewer); show(viewer);
viewer.setItemOnCursor(cursor); viewer.setItemOnCursor(cursor);
}, CustomAnvil.instance); }, CustomAnvil.instance);
// Create new conflict item // Create new conflict item
ItemStack createItem = new ItemStack(Material.GREEN_TERRACOTTA); ItemStack createItem = new ItemStack(Material.PAPER);
ItemMeta createMeta = createItem.getItemMeta(); ItemMeta createMeta = createItem.getItemMeta();
createMeta.setDisplayName("\u00A7aCreate new conflict");
createMeta.setLore(Arrays.asList(
"\u00A77Create a new anvil restriction.",
"\u00A77You will be asked to name the conflict in chat.",
"\u00A77Then, you should edit the conflict config as you need"
));
createItem.setItemMeta(createMeta); createItem.setItemMeta(createMeta);
this.backgroundPane.bindItem('C', new GuiItem(createItem, (clickEvent)->{ this.backgroundPane.bindItem('C', new GuiItem(createItem, (clickEvent)->{
@ -145,12 +151,12 @@ public class EnchantConflictGui extends ChestGui {
message = message.toLowerCase(Locale.ROOT); message = message.toLowerCase(Locale.ROOT);
if("cancel".equalsIgnoreCase(message)) { if("cancel".equalsIgnoreCase(message)) {
player.sendMessage("cancelled..."); player.sendMessage("conflict creation cancelled...");
show(player); show(player);
return; return;
} }
message = message.replace('_', ' '); message = message.replace(' ', '_');
// Try to find if it already exists in a for loop // Try to find if it already exists in a for loop
// Not the most efficient on large number of conflict, but it should not run often. // Not the most efficient on large number of conflict, but it should not run often.
@ -220,7 +226,7 @@ public class EnchantConflictGui extends ChestGui {
ItemMeta meta = item.getItemMeta(); ItemMeta meta = item.getItemMeta();
meta.setDisplayName("\u00A7e" + CasedStringUtil.snakeToUpperSpacedCase(conflict.getName()) + " \u00A7rConflict"); meta.setDisplayName("\u00A7e" + CasedStringUtil.snakeToUpperSpacedCase(conflict.getName()) + " \u00A7fConflict");
meta.setLore(Arrays.asList( meta.setLore(Arrays.asList(
"\u00A77Enchantment count: \u00A7e"+conflict.getEnchants().size(), "\u00A77Enchantment count: \u00A7e"+conflict.getEnchants().size(),
"\u00A77Group count: \u00A7e"+conflict.getCantConflictGroup().getGroups().size(), "\u00A77Group count: \u00A7e"+conflict.getCantConflictGroup().getGroups().size(),
@ -246,7 +252,7 @@ public class EnchantConflictGui extends ChestGui {
this.conflictGuiMap.put(conflict, gui); this.conflictGuiMap.put(conflict, gui);
addToPage(guiItem); addToPage(guiItem);
}else{ }else{
// replace item with the updated one // Replace item with the updated one
guiItem = gui.getParentItemForThisGui(); guiItem = gui.getParentItemForThisGui();
guiItem.setItem(item); guiItem.setItem(item);
} }
@ -284,11 +290,12 @@ public class EnchantConflictGui extends ChestGui {
OutlinePane page = null; OutlinePane page = null;
int pageID = 0; int pageID = 0;
while(pageID < this.pages.size()){ while(pageID < this.pages.size()){
OutlinePane tempPage = this.pages.get(pageID++); OutlinePane tempPage = this.pages.get(pageID);
if(tempPage.getItems().contains(guiItem)){ if(tempPage.getItems().contains(guiItem)){
page = tempPage; page = tempPage;
break; break;
} }
pageID++;
} }
if(page == null){// Why... if(page == null){// Why...
@ -301,10 +308,14 @@ public class EnchantConflictGui extends ChestGui {
page.removeItem(guiItem); page.removeItem(guiItem);
// There is now a slot available, let fill it if possible // There is now a slot available, let fill it if possible
if(pageID < this.pages.size() - 1){ if(pageID < (this.pages.size() - 1)){
OutlinePane newPage = this.pages.get(pageID+1); OutlinePane newPage = this.pages.get(pageID+1);
GuiItem newItem = newPage.getItems().get(0); GuiItem nextPageItem = newPage.getItems().get(0);
removeFromPage(newPage, pageID+1, newItem);
removeFromPage(newPage, pageID+1, nextPageItem);
OutlinePane thisPage = this.pages.get(pageID);
thisPage.addItem(nextPageItem);
}else if(pageID > 0 && page.getItems().isEmpty()){ }else if(pageID > 0 && page.getItems().isEmpty()){
this.pages.remove(pageID); this.pages.remove(pageID);
} }
@ -319,10 +330,21 @@ public class EnchantConflictGui extends ChestGui {
return pageId; return pageId;
} }
public void placeArrow(int page){ public void placeArrow(int page, boolean customise){
// Place left arrow // Place left arrow
addPane(this.backgroundPane); addPane(this.backgroundPane);
if(page > 0){ if(page > 0){
if(customise){
ItemStack leftItem = this.goLeftItem.getItem();
ItemMeta leftMeta = leftItem.getItemMeta();
leftMeta.setDisplayName("\u00A7eReturn to page " +(page));
leftItem.setItemMeta(leftMeta);
this.goLeftItem.setItem(leftItem);
}
this.backgroundPane.bindItem('L', 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);
@ -330,6 +352,16 @@ public class EnchantConflictGui extends ChestGui {
// Place right arrow // Place right arrow
if(page < pages.size()-1){ if(page < pages.size()-1){
if(customise){
ItemStack rightItem = this.goRightItem.getItem();
ItemMeta rightMeta = rightItem.getItemMeta();
rightMeta.setDisplayName("\u00A7eGo to page " +(page+2));
rightItem.setItemMeta(rightMeta);
this.goRightItem.setItem(rightItem);
}
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);
@ -344,10 +376,13 @@ public class EnchantConflictGui extends ChestGui {
getPanes().clear(); getPanes().clear();
// display the page arrow pane // display the page arrow pane
placeArrow(pageID); placeArrow(pageID, true);
// and add actual page // and add actual page
addPane(page); addPane(page);
// set title
setTitle("Conflict Config ("+(pageID+1)+"/"+(pages.size())+")");
super.show(humanEntity); super.show(humanEntity);
} }
@ -360,7 +395,7 @@ public class EnchantConflictGui extends ChestGui {
getPanes().clear(); getPanes().clear();
// set the page arrow pane // set the page arrow pane
placeArrow(pageID); placeArrow(pageID, false);
// and add actual page // and add actual page
addPane(page); addPane(page);

View file

@ -6,6 +6,7 @@ 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.global.BasicConfigGui import xyz.alexcrea.cuanvil.gui.config.global.BasicConfigGui
import xyz.alexcrea.cuanvil.gui.config.global.EnchantConflictGui
import xyz.alexcrea.cuanvil.gui.config.global.EnchantCostConfigGui import xyz.alexcrea.cuanvil.gui.config.global.EnchantCostConfigGui
import xyz.alexcrea.cuanvil.gui.config.global.EnchantLimitConfigGui import xyz.alexcrea.cuanvil.gui.config.global.EnchantLimitConfigGui
import xyz.alexcrea.cuanvil.util.MetricsUtil import xyz.alexcrea.cuanvil.util.MetricsUtil
@ -41,7 +42,7 @@ class ReloadExecutor : CommandExecutor {
BasicConfigGui.INSTANCE.updateGuiValues() BasicConfigGui.INSTANCE.updateGuiValues()
EnchantCostConfigGui.INSTANCE.updateGuiValues() EnchantCostConfigGui.INSTANCE.updateGuiValues()
EnchantLimitConfigGui.INSTANCE.updateGuiValues() EnchantLimitConfigGui.INSTANCE.updateGuiValues()
EnchantCostConfigGui.INSTANCE.updateGuiValues() EnchantConflictGui.INSTANCE.reloadValues()
// & update metric // & update metric
MetricsUtil.testIfConfigIsDefault() MetricsUtil.testIfConfigIsDefault()

View file

@ -84,9 +84,8 @@ class EnchantConflictManager {
} }
if(conflict.getEnchants().size == 0){ if(conflict.getEnchants().size == 0){
if(!futureUse){ if(!futureUse){
CustomAnvil.instance.logger.warning("Conflict $conflictName do not have valid enchantment, it will not work") CustomAnvil.instance.logger.warning("Conflict $conflictName do not have valid enchantment, it will not do anything")
} }
return null
} }
return conflict return conflict

View file

@ -232,3 +232,7 @@ crossbow_conflict:
notAffectedGroups: [] notAffectedGroups: []
maxEnchantmentBeforeConflict: 1 maxEnchantmentBeforeConflict: 1
# ----------------------------------------------------
# Bellow is for custom conflicts.
# This is also where conflict create from the gui will be placed.
# ----------------------------------------------------