Skip to content

Commit

Permalink
update Structure
Browse files Browse the repository at this point in the history
  • Loading branch information
zitreF committed Jul 25, 2023
1 parent dc0e62b commit 6c4cede
Show file tree
Hide file tree
Showing 9 changed files with 129 additions and 68 deletions.
2 changes: 1 addition & 1 deletion src/main/java/me/cocos/gui/builder/gui/GuiBuilder.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package me.cocos.gui.builder.gui;

import me.cocos.gui.data.GuiItem;
import me.cocos.gui.data.Structure;
import me.cocos.gui.structure.Structure;
import me.cocos.gui.gui.Gui;
import me.cocos.gui.gui.impl.NormalGui;
import org.bukkit.entity.Player;
Expand Down
52 changes: 0 additions & 52 deletions src/main/java/me/cocos/gui/data/Structure.java

This file was deleted.

7 changes: 6 additions & 1 deletion src/main/java/me/cocos/gui/gui/Gui.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import me.cocos.gui.CocosGui;
import me.cocos.gui.data.GuiItem;
import me.cocos.gui.data.Structure;
import me.cocos.gui.structure.Structure;
import me.cocos.gui.gui.holder.GuiHolder;
import me.cocos.gui.helper.ChatHelper;
import org.bukkit.Bukkit;
Expand Down Expand Up @@ -80,6 +80,7 @@ public boolean isDisposable() {

public void applyStructure(Structure structure) {
this.structure = structure;
structure.apply(this);
}

public Structure getStructure() {
Expand All @@ -101,5 +102,9 @@ public BiConsumer<InventoryCloseEvent, Player> onClose() {
return this.onClose;
}

public void open(Player player) {
player.openInventory(this.getInventory());
}

public abstract void dispose();
}
3 changes: 2 additions & 1 deletion src/main/java/me/cocos/gui/gui/impl/NormalGui.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import me.cocos.gui.builder.gui.GuiBuilder;
import me.cocos.gui.data.GuiItem;
import me.cocos.gui.data.Structure;
import me.cocos.gui.structure.Structure;
import me.cocos.gui.gui.Gui;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryClickEvent;
Expand All @@ -20,6 +20,7 @@ public NormalGui(String name, int rows) {
public void dispose() {
this.actions.clear();
this.inventory.clear();
if (structure != null) this.structure.dispose();
}

public static class NormalGuiBuilder implements GuiBuilder<NormalGui, NormalGuiBuilder> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
package me.cocos.gui.listener;

import me.cocos.gui.data.GuiItem;
import me.cocos.gui.gui.Gui;
import me.cocos.gui.gui.holder.GuiHolder;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.inventory.PlayerInventory;

public final class InventoryCloseListener implements Listener {

Expand All @@ -22,5 +20,9 @@ public void onInventoryClose(InventoryCloseEvent event) {
if (gui.onClose() != null) {
gui.onClose().accept(event, player);
}

if (gui.isDisposable()) {
gui.dispose();
}
}
}
77 changes: 77 additions & 0 deletions src/main/java/me/cocos/gui/structure/Structure.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package me.cocos.gui.structure;

import me.cocos.gui.data.GuiItem;
import me.cocos.gui.gui.Gui;

import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.*;

import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public final class Structure {

private static final Map<Character, GuiItem> globalIngredients = new HashMap<>();

private final Map<Character, GuiItem> ingredients;
private final Map<Character, List<GuiItem>> ingredientList;
private final String pattern;

public Structure(String... pattern) {
this.pattern = Arrays.stream(pattern).map(string -> string.replace(" ", "")).collect(Collectors.joining());
this.ingredients = new HashMap<>();
this.ingredientList = new HashMap<>();
}

public Structure ingredient(char character, GuiItem guiItem) {
this.ingredients.put(character, guiItem);
return this;
}

public void apply(Gui gui) {
for (int i = 0; i < pattern.length(); i++) {
char character = this.pattern.charAt(i);
GuiItem guiItem = this.getGuiItem(character);
if (guiItem != null) {
gui.setItem(i, guiItem);
}
}
}


private GuiItem getGuiItem(char character) {
return Optional.ofNullable(ingredients.get(character))
.orElseGet(() -> {
List<GuiItem> guiItems = ingredientList.get(character);
if (guiItems != null) {
Iterator<GuiItem> guiItemIterator = guiItems.iterator();
if (guiItemIterator.hasNext()) {
GuiItem nextGuiItem = guiItemIterator.next();
guiItemIterator.remove();
return nextGuiItem;
}
}
return globalIngredients.get(character);
});
}

public Structure contents(char character, List<GuiItem> guiItems) {
ingredientList.put(character, new ArrayList<>(guiItems));
return this;
}

public void dispose() {
this.ingredients.clear();
this.ingredientList.clear();
}

public static void globalIngredient(char character, GuiItem guiItem) {
globalIngredients.put(character, guiItem);
}

public static Structure of(String... pattern) {
return new Structure(pattern);
}
}
2 changes: 1 addition & 1 deletion src/test/java/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@ public final class Main extends JavaPlugin {
public void onEnable() {
this.getCommand("test").setExecutor(new TestCommand());
}
}
}
2 changes: 1 addition & 1 deletion src/test/java/command/TestCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public class TestCommand implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
Player player = (Player) sender;
testMenu.openGui(player);
testMenu.openSecondGui(player);
return false;
}
}
46 changes: 37 additions & 9 deletions src/test/java/menu/TestMenu.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,53 @@

import me.cocos.gui.builder.gui.GuiBuilder;
import me.cocos.gui.data.GuiItem;
import me.cocos.gui.data.Structure;
import me.cocos.gui.structure.Structure;
import me.cocos.gui.gui.Gui;
import org.bukkit.Material;
import org.bukkit.entity.Player;

import java.util.Arrays;
import java.util.List;

public class TestMenu {

public void openGui(Player player) {
Gui gui = GuiBuilder.normal("&7Test", 3)
.onClick((event, p) -> event.setCancelled(true))
.disposable(true)
.structure(Structure.of(
"# # # # # # # # #",
"# # & # & # & # #",
"# # # # # # # # #"
)
.ingredient('&', GuiItem.of(Material.DIAMOND).onClick((inventoryClickEvent, p) -> {
p.sendMessage("diament");
}))
.ingredient('#', GuiItem.of(Material.BLACK_STAINED_GLASS_PANE).onClick(((inventoryClickEvent, p) -> {
p.sendMessage("glass");
}))))
.build();
gui.open(player);
}

public void openSecondGui(Player player) {
List<GuiItem> randomList = Arrays.stream(Material.values())
.limit(10)
.filter(material -> material != Material.AIR)
.map(GuiItem::of)
.toList();
Gui gui = GuiBuilder.normal("&7Test 2", 3)
.onClick((event, p) -> event.setCancelled(true))
.disposable(true)
.structure(Structure.of(
"& & & & & & & & &",
"& # # # # # # # &",
"& & & & & & & & &"
)
.ingredient('&', GuiItem.of(Material.BLACK_STAINED_GLASS))
.contents('#', randomList)
)
.build();
Structure structure = Structure.of(
"# # # # # # # # #",
"# # & # & # & # #",
"# # # # # # # # #"
).ingredient('&', GuiItem.of(Material.DIAMOND).onClick((inventoryClickEvent, player1) -> player1.sendMessage("diament")))
.ingredient('#', GuiItem.of(Material.BLACK_STAINED_GLASS_PANE).onClick(((inventoryClickEvent, player1) -> player1.sendMessage("glass"))));
structure.apply(gui);
player.openInventory(gui.getInventory());
gui.open(player);
}
}

0 comments on commit 6c4cede

Please sign in to comment.