9
0
mirror of https://github.com/HibiscusMC/HMCCosmetics.git synced 2025-12-29 11:59:21 +00:00

Fixed (extremely) dumb runnable in GUI

This commit is contained in:
HeroBrineGoat
2022-01-20 22:33:50 -05:00
parent f0a046f434
commit 246fd3f9a6
3 changed files with 85 additions and 79 deletions

View File

@@ -106,9 +106,12 @@ public class HMCCosmetics extends JavaPlugin {
}
public void load() {
this.messageHandler.load();
this.cosmeticsMenu.load();
this.database.load();
Bukkit.getScheduler().runTaskAsynchronously(this,
() -> {
this.messageHandler.load();
this.cosmeticsMenu.load();
this.database.load();
});
}
public MessageHandler getMessageHandler() {

View File

@@ -17,6 +17,7 @@ import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.Nullable;
import java.util.HashMap;
import java.util.Locale;
@@ -58,83 +59,21 @@ public class CosmeticGui {
for (final var entry : guiItemMap.entrySet()) {
final int slot = entry.getKey();
final GuiItem guiItem = entry.getValue();
final ItemStack itemStack = this.itemStackMap.get(slot);
if (itemStack == null) continue;
guiItem.setItemStack(
ItemBuilder.from(itemStack.clone()).papiPlaceholders(player).build()
);
if (guiItem instanceof final ArmorItem armorItem) {
final Map<String, String> placeholders = new HashMap<>();
final PlayerArmor playerArmor = user.getPlayerArmor();
final ArmorItem hat = playerArmor.getHat();
final ArmorItem backpack = playerArmor.getBackpack();
final ArmorItem.Type type = armorItem.getType();
final String id = switch (type) {
case HAT -> hat.getId();
case BACKPACK -> backpack.getId();
};
placeholders.put(
Placeholder.ENABLED,
String.valueOf(id.equals(armorItem.getId())).
toLowerCase(Locale.ROOT));
final String permission = armorItem.getPermission() == null ? "" : armorItem.getPermission();
final boolean hasPermission = permission.isBlank() || player.hasPermission(permission);
placeholders.put(
Placeholder.ALLOWED,
String.valueOf(hasPermission).
toLowerCase(Locale.ROOT));
this.gui.setItem(slot,
new GuiItem(
ItemBuilder.from(
armorItem.getItemStack(hasPermission)
).namePlaceholders(placeholders).
lorePlaceholders(placeholders).
papiPlaceholders(player).
build(),
event -> {
if (!hasPermission) {
this.messageHandler.sendMessage(
player,
Messages.NO_COSMETIC_PERMISSION
);
return;
}
this.setUserArmor(player, user, armorItem, event, armorItem.getAction());
}
)
);
continue;
}
final GuiItem guiItem = this.getGuiItem(user, player, slot);
if (guiItem == null) continue;
this.gui.setItem(slot, guiItem);
}
}
private void setUserArmor(
final HumanEntity player,
final HumanEntity humanEntity,
final User user,
final ArmorItem armorItem,
final InventoryClickEvent event,
final GuiAction<InventoryClickEvent> actionIfSet) {
if (player == null) {
if (!(humanEntity instanceof final Player player)) {
return;
}
@@ -154,6 +93,12 @@ public class CosmeticGui {
}
}
}
final int slot = event.getSlot();
final GuiItem guiItem = this.getGuiItem(user, player, slot);
if (guiItem == null) return;
this.gui.updateItem(slot, guiItem);
}
public void open(final HumanEntity humanEntity) {
@@ -172,17 +117,78 @@ public class CosmeticGui {
this.gui.setDefaultClickAction(event -> {
event.setCancelled(true);
Bukkit.getScheduler().runTaskLater(
this.plugin,
() -> {
this.setItems(user);
this.gui.update();
},
1);
});
this.setItems(user);
this.gui.open(humanEntity);
}
@Nullable
private GuiItem getGuiItem(final User user, final Player player, final int slot) {
final GuiItem guiItem = this.guiItemMap.get(slot);
if (guiItem == null) return null;
final ItemStack itemStack = this.itemStackMap.get(slot);
if (itemStack == null) return null;
guiItem.setItemStack(
ItemBuilder.from(itemStack.clone()).papiPlaceholders(player).build()
);
if (guiItem instanceof final ArmorItem armorItem) {
final Map<String, String> placeholders = new HashMap<>();
final PlayerArmor playerArmor = user.getPlayerArmor();
final ArmorItem hat = playerArmor.getHat();
final ArmorItem backpack = playerArmor.getBackpack();
final ArmorItem.Type type = armorItem.getType();
final String id = switch (type) {
case HAT -> hat.getId();
case BACKPACK -> backpack.getId();
};
placeholders.put(
Placeholder.ENABLED,
String.valueOf(id.equals(armorItem.getId())).
toLowerCase(Locale.ROOT));
final String permission = armorItem.getPermission() == null ? "" : armorItem.getPermission();
final boolean hasPermission = permission.isBlank() || player.hasPermission(permission);
placeholders.put(
Placeholder.ALLOWED,
String.valueOf(hasPermission).
toLowerCase(Locale.ROOT));
return new GuiItem(
ItemBuilder.from(
armorItem.getItemStack(hasPermission)
).namePlaceholders(placeholders).
lorePlaceholders(placeholders).
papiPlaceholders(player).
build(),
event -> {
if (!hasPermission) {
this.messageHandler.sendMessage(
player,
Messages.NO_COSMETIC_PERMISSION
);
return;
}
this.setUserArmor(player, user, armorItem, event, armorItem.getAction());
}
);
}
return guiItem;
}
}

View File

@@ -6,16 +6,13 @@ import io.github.fisher2911.hmccosmetics.HMCCosmetics;
import io.github.fisher2911.hmccosmetics.inventory.PlayerArmor;
import io.github.fisher2911.hmccosmetics.user.User;
import io.github.fisher2911.hmccosmetics.util.StringUtils;
import io.github.fisher2911.hmccosmetics.util.builder.ColorBuilder;
import io.github.fisher2911.hmccosmetics.util.builder.ItemBuilder;
import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit;
import org.bukkit.Color;
import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;