| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- package me.lethunderhawk.profile.data.sacks.mining;
- import me.lethunderhawk.fluxapi.FluxService;
- import me.lethunderhawk.fluxapi.profile.ProfileManager;
- import me.lethunderhawk.fluxapi.util.gui.InventoryGUI;
- import me.lethunderhawk.fluxapi.util.itemdesign.ItemOptions;
- import me.lethunderhawk.fluxapi.util.itemdesign.LoreDesigner;
- import me.lethunderhawk.profile.data.sacks.Sack;
- import me.lethunderhawk.util.StringUtil;
- import net.kyori.adventure.text.Component;
- import net.kyori.adventure.text.format.NamedTextColor;
- import org.bukkit.Material;
- import org.bukkit.entity.Player;
- import org.bukkit.event.inventory.ClickType;
- import org.bukkit.inventory.ItemStack;
- import org.bukkit.inventory.PlayerInventory;
- import java.util.HashMap;
- import java.util.List;
- public class MiningSackGUI extends InventoryGUI {
- private int i = 10;
- private Sack sack;
- private Player player;
- public MiningSackGUI(Player p) {
- super("Your Mining Sack", 36, p);
- if (this.sack == null) {
- throw new IllegalStateException("Sack profile not available.");
- }
- }
- @Override
- public void performAdditionalComputationOnPlayer(Player player){
- sack = FluxService.get(ProfileManager.class).getProfile(player.getUniqueId()).getSubProfile("mining_sack", MiningSack.class);
- this.player = player;
- }
- private void addSackItem(Material material) {
- String materialName = StringUtil.toCamelCase(material.name());
- String finalName = materialName;
- List<Component> lore = LoreDesigner.createLore("<dark_gray>Mining Sack </dark_gray>" +
- "<br>" +
- "<br>" +
- "Stored: " +
- (sack.getMaterialAmount(material) == 0 ? "<dark_gray>0</dark_gray>" : "<yellow>" + sack.getMaterialAmount(material) + "</yellow>")
- + "/"
- + sack.getMaxMaterialAmount(material)
- + "<br><br><aqua>Right-Click for stack!</aqua>"
- + "<br><yellow>Click to pickup!</yellow>",
- "This is a string long enough to have everything inside of it", NamedTextColor.GRAY);
- setItemWithClickAction(i, new ItemOptions(material)
- .setName(Component.text(finalName, NamedTextColor.GREEN))
- .setLore(lore)
- .buildItemStack(), (p, type) -> {
- doSackAction(type, material);
- });
- i++;
- }
- private void doSackAction(ClickType type, Material material) {
- int amountToTake = 1;
- if (type == ClickType.RIGHT || type == ClickType.SHIFT_RIGHT) {
- amountToTake = 64;
- }
- int removed = sack.takeOutItem(material, amountToTake);
- if (removed > 0) {
- ItemStack stack = new ItemStack(material, removed);
- HashMap<Integer, ItemStack> leftover = player.getInventory().addItem(stack);
- // If inventory full → return items back into sack
- if (!leftover.isEmpty()) {
- int notStored = leftover.values().stream()
- .mapToInt(ItemStack::getAmount)
- .sum();
- sack.addItem(material, notStored);
- }
- }
- player.updateInventory();
- update();
- }
- @Override
- public void buildContent() {
- fillGlassPaneBackground();
- i = 10;
- for (Material material : sack.getAssociatedSackMap().keySet()) {
- addSackItem(material);
- }
- setCloseButton(31);
- setAddAllItemsItem();
- }
- private void setAddAllItemsItem() {
- setItemWithClickAction(32,
- new ItemOptions(Material.CAULDRON)
- .setName(Component.text("Add all items into the Sack", NamedTextColor.GREEN))
- .setLore(LoreDesigner.createLore(
- "<br>Allows you to put all items from your inventory into the sack",
- "This is an example width reference",
- NamedTextColor.DARK_GRAY)
- )
- .buildItemStack(), this::putAllItemsIn);
- }
- private void putAllItemsIn(Player player, ClickType type) {
- PlayerInventory inv = player.getInventory();
- for (ItemStack stack : inv.getContents()) {
- if (stack == null) continue;
- if (stack.getType() == Material.AIR) continue;
- Material material = stack.getType();
- int amount = stack.getAmount();
- // Try adding to sack
- int leftover = sack.addItem(material, amount);
- int successfullyAdded = amount - leftover;
- if (successfullyAdded > 0) {
- stack.setAmount(leftover); // leave leftover in inventory
- }
- }
- player.updateInventory();
- update();
- }
- @Override
- public void update() {
- i = 10;
- for (Material material : sack.getAssociatedSackMap().keySet()) {
- addSackItem(material);
- }
- }
- }
|