Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @RequiredArgsConstructor
- public class StringFolderGui extends BaseGui{
- private final String title;
- private final int[] inventoryMap;
- private final VisualLink[] links;
- @Override
- public void onClick(InventoryClickEvent event) {
- final int clickedId = inventoryMap[event.getSlot()];
- if(clickedId >= 0)
- links[clickedId].link.run((Player) event.getWhoClicked());
- }
- @Override
- protected Inventory render() {
- Inventory inv = Bukkit.createInventory(null, inventoryMap.length);
- ItemStack[] contents = inv.getContents();
- for(int i = 0; i < inventoryMap.length; i++) {
- final int itemId = inventoryMap[i];
- if(itemId < 0)
- continue;
- contents[i] = links[itemId].item;
- }
- inv.setContents(contents);
- return inv;
- }
- @Data
- public static class VisualLink {
- public final Link link;
- public final ItemStack item;
- public static VisualLink of(Link link, ItemStack item) {
- return new VisualLink(link, item);
- }
- }
- public static Builder builder() {
- return new Builder();
- }
- public static class Builder {
- private String title = "Gui";
- private String map = "";
- private Map<Character, VisualLink> links = new HashMap<>();
- public Builder title(@NonNull String title) {
- this.title = title;
- return this;
- }
- public Builder map(@NonNull String map) {
- if(!isValid(map.length()))
- throw new IllegalArgumentException("Invalid map length: " + map.length());
- this.map = map;
- return this;
- }
- private boolean isValid(int length) {
- return length % 9 == 0 && length > 0 && length <= GuiSize.DOUBLE.size();
- }
- public Builder addLink(char c, VisualLink link) {
- links.put(c, link);
- return this;
- }
- public Builder addLink(char c, Link link, ItemStack item) {
- links.put(c, VisualLink.of(link, item));
- return this;
- }
- public Builder addLink(char c, Link link, Material display, String name, String... lores) {
- links.put(c, VisualLink.of(link, GuiUtils.itemStack(display, name, lores)));
- return this;
- }
- public StringFolderGui build() {
- VisualLink[] clinks = new VisualLink[links.size()];
- char[] linksbychar = new char[links.size()];
- {//compile clinks and linksbychar
- int index = 0;
- for (Map.Entry<Character, VisualLink> e : links.entrySet()) {
- clinks[index] = e.getValue();
- linksbychar[index] = e.getKey();
- index++;
- }
- }
- int[] cmap = new int[map.length()];
- {//compile cmap
- for (int index = 0; index < cmap.length; index++) {
- final char c = map.charAt(index);
- int id = -1;
- for (int i = 0; i < clinks.length; i++) {
- if (linksbychar[i] == c) {
- id = i;
- break;
- }
- }
- cmap[index] = id;
- }
- }
- return new StringFolderGui(title, cmap, clinks);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement