Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,52 +1,50 @@
package com.bencodez.advancedcore.api.inventory.editgui;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

import com.bencodez.advancedcore.api.inventory.BInventory;
import com.bencodez.advancedcore.api.inventory.BInventoryButton;

/**
* Edit GUI for sorting and organizing edit buttons.
*/
public class EditGUI extends BInventory {

/**
* Constructor for EditGUI.
*
* @param name the inventory name
*/
public EditGUI(String name) {
super(name);
}

/**
* Sorts the edit buttons alphabetically by key.
*/
public void sort() {
Map<Integer, BInventoryButton> map = getButtons();
setButtons(new HashMap<>());
LinkedHashMap<String, EditGUIButton> buttons = new LinkedHashMap<>();
ArrayList<String> sortedList = new ArrayList<>();
for (BInventoryButton button : map.values()) {
if (button instanceof EditGUIButton) {
EditGUIButton b = (EditGUIButton) button;
String key = b.getEditor().getKey();
sortedList.add(key);
b.setSlot(-1);
buttons.put(key, b);
} else {
addButton(button);
}
}
sortedList.sort(Comparator.naturalOrder());

for (String key : sortedList) {
addButton(buttons.get(key));
}
}

}
package com.bencodez.advancedcore.api.inventory.editgui;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.bencodez.advancedcore.api.inventory.BInventory;
import com.bencodez.advancedcore.api.inventory.BInventoryButton;

/**
* Edit GUI for sorting and organizing edit buttons.
*/
public class EditGUI extends BInventory {
public EditGUI(String name) {
super(name);
}

/**
* Sorts edit buttons alphabetically by editor key while retaining non-editor
* buttons and duplicate editor keys.
*/
public void sort() {
Map<Integer, BInventoryButton> current = getButtons();
List<BInventoryButton> fixedButtons = new ArrayList<>();
List<EditGUIButton> editButtons = new ArrayList<>();

for (BInventoryButton button : current.values()) {
if (button instanceof EditGUIButton) {
EditGUIButton editButton = (EditGUIButton) button;
editButton.setSlot(-1);
editButtons.add(editButton);
} else {
fixedButtons.add(button);
}
}

editButtons.sort(Comparator.comparing(button -> button.getEditor().getKey(),
Comparator.nullsLast(String.CASE_INSENSITIVE_ORDER)));

setButtons(new HashMap<>());
for (BInventoryButton button : fixedButtons) {
addButton(button);
}
for (EditGUIButton button : editButtons) {
addButton(button);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,129 +1,89 @@
package com.bencodez.advancedcore.api.inventory.editgui;

import java.util.ArrayList;
import java.util.HashMap;

import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;

import com.bencodez.advancedcore.api.inventory.BInventory.ClickEvent;
import com.bencodez.advancedcore.api.inventory.BInventoryButton;
import com.bencodez.advancedcore.api.inventory.editgui.valuetypes.EditGUIValue;
import com.bencodez.advancedcore.api.inventory.editgui.valuetypes.EditGUIValueInventory;
import com.bencodez.advancedcore.api.inventory.editgui.valuetypes.EditGUIValueList;
import com.bencodez.advancedcore.api.item.ItemBuilder;
import com.bencodez.simpleapi.array.ArrayUtils;

import lombok.Getter;
import lombok.Setter;

/**
* Button for editing GUI values.
*/
public class EditGUIButton extends BInventoryButton {

/**
* The editor for this button.
*
* @return the editor
* @param editor the editor
*/
@Getter
@Setter
private EditGUIValue editor;

/**
* Constructor for EditGUIButton.
*
* @param editer the GUI value editor
*/
public EditGUIButton(EditGUIValue editer) {
super(new ItemBuilder(Material.PAPER));
this.editor = editer;
}

/**
* Constructor for EditGUIButton with custom item.
*
* @param item the item builder
* @param editer the GUI value editor
*/
public EditGUIButton(ItemBuilder item, EditGUIValue editer) {
super(item);
this.editor = editer;
}

/**
* Adds a lore line to the button.
*
* @param lore the lore line
* @return this instance
*/
public EditGUIButton addLore(String lore) {
getEditor().addLore(lore);
return this;
}

/**
* Adds options to the button.
*
* @param str the options
* @return this instance
*/
public EditGUIButton addOptions(String... str) {
getEditor().addOptions(str);
return this;
}

@SuppressWarnings("unchecked")
@Override
public ItemStack getItem(Player player, HashMap<String, String> placeholders) {
ItemBuilder builder = getBuilder();
builder.addPlaceholder(placeholders);
if ((getEditor() instanceof EditGUIValueInventory)) {
if (!builder.hasCustomDisplayName()) {
builder.setName("&cSet " + getEditor().getKey());
}
builder.setLore("&cClick to open");
} else if (!(getEditor() instanceof EditGUIValueList)) {
if (!builder.hasCustomDisplayName()) {
builder.setName("&cSet " + getEditor().getType() + " for " + getEditor().getKey());
}
builder.setLore("&cCurrent value: " + getEditor().getCurrentValue());
} else {
if (!builder.hasCustomDisplayName()) {
builder.setName("&cEdit list for " + getEditor().getKey());
}
if (getEditor().getCurrentValue() instanceof ArrayList<?>) {
builder.setLore(ArrayUtils.makeStringList((ArrayList<String>) getEditor().getCurrentValue()));
} else {
builder.setLore("&cCurrent value: null");
}
}
ArrayList<String> lores = getEditor().getLores();
if (lores != null) {
for (String t : lores) {
builder.addLoreLine("&3" + t);
}
}
return builder.toItemStack(player);
}

@Override
public void onClick(ClickEvent clickEvent) {
getEditor().setInv(getInv());
getEditor().onClick(clickEvent);
}

/**
* Sets the name of the button.
*
* @param name the name
* @return this instance
*/
public EditGUIButton setName(String name) {
this.getBuilder().setName(name);
return this;
}
}
package com.bencodez.advancedcore.api.inventory.editgui;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;

import com.bencodez.advancedcore.api.inventory.BInventory.ClickEvent;
import com.bencodez.advancedcore.api.inventory.BInventoryButton;
import com.bencodez.advancedcore.api.inventory.editgui.valuetypes.EditGUIValue;
import com.bencodez.advancedcore.api.inventory.editgui.valuetypes.EditGUIValueInventory;
import com.bencodez.advancedcore.api.item.ItemBuilder;

import lombok.Getter;
import lombok.Setter;

/**
* Button for editing GUI values.
*/
public class EditGUIButton extends BInventoryButton {
@Getter
@Setter
private EditGUIValue editor;

public EditGUIButton(EditGUIValue editor) {
super(new ItemBuilder(Material.PAPER));
this.editor = editor;
}

public EditGUIButton(ItemBuilder item, EditGUIValue editor) {
super(item);
this.editor = editor;
}

public EditGUIButton addLore(String lore) {
getEditor().addLore(lore);
return this;
}

public EditGUIButton addOptions(String... values) {
getEditor().addOptions(values);
return this;
}

@Override
public ItemStack getItem(Player player, HashMap<String, String> placeholders) {
ItemBuilder builder = getBuilder();
builder.addPlaceholder(placeholders);

if (getEditor() instanceof EditGUIValueInventory) {
applyInventoryDisplay(builder);
} else {
if (!builder.hasCustomDisplayName()) {
builder.setName(getEditor().getButtonName());
}
List<String> lore = getEditor().getButtonLore();
builder.setLore(lore == null ? new String[0] : lore.toArray(new String[0]));
}

ArrayList<String> customLore = getEditor().getLores();
if (customLore != null) {
for (String line : customLore) {
builder.addLoreLine("&3" + line);
}
}
return builder.toItemStack(player);
}

@Override
public void onClick(ClickEvent clickEvent) {
getEditor().setInv(getInv());
getEditor().onClick(clickEvent);
}

public EditGUIButton setName(String name) {
getBuilder().setName(name);
return this;
}

private void applyInventoryDisplay(ItemBuilder builder) {
if (!builder.hasCustomDisplayName()) {
builder.setName("&cSet " + getEditor().getKey());
}
builder.setLore("&cClick to open");
}
}
Loading
Loading