package de.fanta.challenges.guis;
import de.fanta.challenges.Challenges;
import de.fanta.challenges.utils.ChatUtil;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.configuration.MemorySection;
import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import java.io.IOException;
import java.util.Map;
import java.util.logging.Level;
public class BackpackGui {
public static final String TITLE = Challenges.getPlugin().getGUIPREFIX() + " >> Backpack";
private Inventory backpack;
public BackpackGui(int size) {
this.backpack = Bukkit.createInventory(null, size, TITLE);
}
public void resize(int newSize) {
if (newSize == backpack.getSize()) {
return;
}
Inventory newBackpack = Bukkit.createInventory(backpack.getHolder(), newSize, TITLE);
if (newSize > backpack.getSize()) {
for (int i = 0; i < backpack.getSize(); i++) {
newBackpack.setItem(i, backpack.getItem(i));
}
} else if (newSize < backpack.getSize()) {
for (int i = 0; i < newSize; i++) {
newBackpack.setItem(i, backpack.getItem(i));
}
for (int i = newSize; i < backpack.getSize(); i++) {
ItemStack item = backpack.getItem(i);
if (item != null && item.getType() != Material.AIR) {
if (!newBackpack.addItem(item).isEmpty()) {
ChatUtil.sendBrodcastMessage(ChatUtil.RED + "Backpack kann nicht verkleinert werden. Zu wenig Platz!");
return;
}
}
}
}
for (HumanEntity player : backpack.getViewers()) {
player.closeInventory();
}
this.backpack = newBackpack;
}
public void open(Player player) {
player.openInventory(this.backpack);
}
public int getSize() {
return this.backpack.getSize();
}
public void clearConfig() {
for (String section : Challenges.getPlugin().getBackpackConfig().getKeys(false)) {
if (section != null) {
Challenges.getPlugin().getBackpackConfig().set(section, null);
}
try {
Challenges.getPlugin().getBackpackConfig().save(Challenges.getPlugin().getBackpackConfigFile());
} catch (IOException e) {
Bukkit.getLogger().log(Level.SEVERE, "Could not save backpack config", e);
}
}
}
public void saveInventoryToConfig() {
clearConfig();
for (int slot = 0; slot < backpack.getSize(); slot++) {
ItemStack stack = backpack.getItem(slot);
if (stack != null && stack.getType() != Material.AIR) {
Challenges.getPlugin().getBackpackConfig().set(String.valueOf(slot), stack.serialize());
}
}
try {
Challenges.getPlugin().getBackpackConfig().save(Challenges.getPlugin().getBackpackConfigFile());
} catch (IOException e) {
Bukkit.getLogger().log(Level.SEVERE, "Could not save backpack config", e);
}
}
public void loadInventoryFromConfig() {
for (Map.Entry<String, Object> stringObjectEntry : Challenges.getPlugin().getBackpackConfig().getValues(false).entrySet()) {
int slot;
try {
slot = Integer.parseInt(stringObjectEntry.getKey());
} catch (NumberFormatException e) {
Bukkit.getLogger().log(Level.SEVERE, "Fehler! Slot: " + stringObjectEntry.getKey(), e);
continue;
}
if (slot >= backpack.getSize()) {
Bukkit.getLogger().log(Level.SEVERE, "Slot " + slot + " befindet sich außerhalb des Inventars!");
continue;
}
MemorySection memorySection = (MemorySection) stringObjectEntry.getValue();
ItemStack deserialized = ItemStack.deserialize(memorySection.getValues(false));
backpack.setItem(slot, deserialized);
}
}
}