mirror of
https://github.com/HibiscusMC/HMCCosmetics.git
synced 2025-12-20 15:39:16 +00:00
Compare commits
16 Commits
nms_packet
...
v2.7.9
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ff1addfd65 | ||
|
|
73f013bf1f | ||
|
|
204fee4456 | ||
|
|
e7ea62a4d2 | ||
|
|
42802e41b4 | ||
|
|
7e7d81d0f8 | ||
|
|
b07c3c9878 | ||
|
|
a19d564460 | ||
|
|
b3408143f0 | ||
|
|
3c1539285d | ||
|
|
a642d88af2 | ||
|
|
36d4009f5e | ||
|
|
bebee807bc | ||
|
|
26c579b69f | ||
|
|
ef665e7e83 | ||
|
|
7a6475c467 |
@@ -8,7 +8,7 @@ plugins {
|
||||
}
|
||||
|
||||
group = "com.hibiscusmc"
|
||||
version = "2.7.8${getGitCommitHash()}"
|
||||
version = "2.7.9${getGitCommitHash()}"
|
||||
|
||||
allprojects {
|
||||
apply(plugin = "java")
|
||||
@@ -89,9 +89,9 @@ allprojects {
|
||||
compileOnly("me.lojosho:HibiscusCommons:0.6.3-0f0baaf4")
|
||||
|
||||
// Handled by Spigot Library Loader
|
||||
compileOnly("net.kyori:adventure-api:4.19.0")
|
||||
compileOnly("net.kyori:adventure-text-minimessage:4.19.0")
|
||||
compileOnly("net.kyori:adventure-platform-bukkit:4.3.4")
|
||||
compileOnly("net.kyori:adventure-api:4.23.0")
|
||||
compileOnly("net.kyori:adventure-text-minimessage:4.23.0")
|
||||
compileOnly("net.kyori:adventure-platform-bukkit:4.4.0")
|
||||
|
||||
annotationProcessor("org.projectlombok:lombok:1.18.36")
|
||||
testCompileOnly("org.projectlombok:lombok:1.18.36")
|
||||
@@ -139,7 +139,7 @@ tasks {
|
||||
downloadPlugins {
|
||||
hangar("PlaceholderAPI", "2.11.6")
|
||||
url("https://ci.dmulloy2.net/job/ProtocolLib/lastSuccessfulBuild/artifact/build/libs/ProtocolLib.jar")
|
||||
url("https://download.luckperms.net/1567/bukkit/loader/LuckPerms-Bukkit-5.4.150.jar")
|
||||
url("https://download.luckperms.net/1584/bukkit/loader/LuckPerms-Bukkit-5.5.0.jar")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -400,6 +400,7 @@ public class CosmeticCommand implements CommandExecutor {
|
||||
if (user.hasCosmeticInSlot(CosmeticSlot.BACKPACK)) {
|
||||
player.sendMessage("Backpack Location -> " + user.getUserBackpackManager().getEntityManager().getLocation());
|
||||
}
|
||||
player.sendMessage("Cosmetic Passengers -> " + user.getUserBackpackManager().getAreaEffectEntityId());
|
||||
player.sendMessage("Cosmetics -> " + user.getCosmetics());
|
||||
player.sendMessage("EntityId -> " + player.getEntityId());
|
||||
return true;
|
||||
|
||||
@@ -228,9 +228,9 @@ public class Settings {
|
||||
lockedCosmeticColor = shadingSettings.node(LOCKED_COSMETIC_COLOR_PATH).getString();
|
||||
|
||||
ConfigurationNode cosmeticTypeSettings = menuSettings.node(COSMETIC_TYPE_SETTINGS_PATH);
|
||||
cosmeticEquipClickType = cosmeticTypeSettings.node(EQUIP_CLICK_TYPE).getString("ALL");
|
||||
cosmeticUnEquipClickType = cosmeticTypeSettings.node(UNEQUIP_CLICK_TYPE).getString("ALL");
|
||||
cosmeticDyeClickType = cosmeticTypeSettings.node(DYE_CLICK_TYPE).getString("ALL");
|
||||
cosmeticEquipClickType = cosmeticTypeSettings.node(EQUIP_CLICK_TYPE).getString("ANY");
|
||||
cosmeticUnEquipClickType = cosmeticTypeSettings.node(UNEQUIP_CLICK_TYPE).getString("ANY");
|
||||
cosmeticDyeClickType = cosmeticTypeSettings.node(DYE_CLICK_TYPE).getString("ANY");
|
||||
|
||||
final var balloonSection = cosmeticSettings.node(BALLOON_OFFSET);
|
||||
balloonOffset = loadVector(balloonSection);
|
||||
|
||||
@@ -3,16 +3,15 @@ package com.hibiscusmc.hmccosmetics.cosmetic;
|
||||
import com.hibiscusmc.hmccosmetics.user.CosmeticUser;
|
||||
import com.hibiscusmc.hmccosmetics.util.MessagesUtil;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import me.lojosho.hibiscuscommons.config.serializer.ItemSerializer;
|
||||
import me.lojosho.shaded.configurate.ConfigurationNode;
|
||||
import me.lojosho.shaded.configurate.serialize.SerializationException;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -26,13 +25,16 @@ public abstract class Cosmetic {
|
||||
|
||||
static {
|
||||
UNDEFINED_DISPLAY_ITEM_STACK = new ItemStack(Material.BARRIER);
|
||||
UNDEFINED_DISPLAY_ITEM_STACK.editMeta(meta -> {
|
||||
meta.displayName(Component.text("Undefined Item Display", NamedTextColor.RED));
|
||||
meta.lore(List.of(
|
||||
Component.text("Please check your configurations & console to", NamedTextColor.RED),
|
||||
Component.text("ensure there are no errors.", NamedTextColor.RED)
|
||||
));
|
||||
});
|
||||
|
||||
ItemMeta meta = UNDEFINED_DISPLAY_ITEM_STACK.getItemMeta();
|
||||
if (meta != null) {
|
||||
// Legacy methods for Spigot >:(
|
||||
meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&cUndefined Item Display"));
|
||||
meta.setLore(List.of(
|
||||
ChatColor.translateAlternateColorCodes('&', "&cPlease check your configurations & console to"),
|
||||
ChatColor.translateAlternateColorCodes('&', "&censure there are no errors.")));
|
||||
}
|
||||
UNDEFINED_DISPLAY_ITEM_STACK.setItemMeta(meta);
|
||||
}
|
||||
|
||||
/** Identifier of the cosmetic. */
|
||||
|
||||
@@ -39,10 +39,12 @@ public class MySQLData extends SQLData {
|
||||
try {
|
||||
openConnection();
|
||||
if (connection == null) throw new NullPointerException("Connection is null");
|
||||
connection.prepareStatement("CREATE TABLE IF NOT EXISTS `COSMETICDATABASE` " +
|
||||
try (PreparedStatement preparedStatement = connection.prepareStatement("CREATE TABLE IF NOT EXISTS `COSMETICDATABASE` " +
|
||||
"(UUID varchar(36) PRIMARY KEY, " +
|
||||
"COSMETICS MEDIUMTEXT " +
|
||||
");").execute();
|
||||
");")) {
|
||||
preparedStatement.execute();
|
||||
}
|
||||
} catch (SQLException | NullPointerException e) {
|
||||
plugin.getLogger().severe("");
|
||||
plugin.getLogger().severe("");
|
||||
@@ -60,17 +62,11 @@ public class MySQLData extends SQLData {
|
||||
@Override
|
||||
public void clear(UUID uniqueId) {
|
||||
Bukkit.getScheduler().runTaskAsynchronously(HMCCosmeticsPlugin.getInstance(), () -> {
|
||||
PreparedStatement preparedSt = null;
|
||||
try {
|
||||
preparedSt = preparedStatement("DELETE FROM COSMETICDATABASE WHERE UUID=?;");
|
||||
try (PreparedStatement preparedSt = preparedStatement("DELETE FROM COSMETICDATABASE WHERE UUID=?;")) {
|
||||
preparedSt.setString(1, uniqueId.toString());
|
||||
preparedSt.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
try {
|
||||
if (preparedSt != null) preparedSt.close();
|
||||
} catch (SQLException e) {}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -23,22 +23,17 @@ public abstract class SQLData extends Data {
|
||||
return CompletableFuture.supplyAsync(() -> {
|
||||
UserData data = new UserData(uniqueId);
|
||||
|
||||
PreparedStatement preparedStatement = null;
|
||||
try {
|
||||
preparedStatement = preparedStatement("SELECT * FROM COSMETICDATABASE WHERE UUID = ?;");
|
||||
try (PreparedStatement preparedStatement = preparedStatement("SELECT * FROM COSMETICDATABASE WHERE UUID = ?;")){
|
||||
preparedStatement.setString(1, uniqueId.toString());
|
||||
ResultSet rs = preparedStatement.executeQuery();
|
||||
if (rs.next()) {
|
||||
String rawData = rs.getString("COSMETICS");
|
||||
HashMap<CosmeticSlot, Map.Entry<Cosmetic, Integer>> cosmetics = deserializeData(rawData);
|
||||
data.setCosmetics(cosmetics);
|
||||
try (ResultSet rs = preparedStatement.executeQuery()) {
|
||||
if (rs.next()) {
|
||||
String rawData = rs.getString("COSMETICS");
|
||||
HashMap<CosmeticSlot, Map.Entry<Cosmetic, Integer>> cosmetics = deserializeData(rawData);
|
||||
data.setCosmetics(cosmetics);
|
||||
}
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
try {
|
||||
if (preparedStatement != null) preparedStatement.close();
|
||||
} catch (SQLException e) {}
|
||||
}
|
||||
return data;
|
||||
});
|
||||
@@ -48,18 +43,12 @@ public abstract class SQLData extends Data {
|
||||
@SuppressWarnings("resource")
|
||||
public void save(CosmeticUser user) {
|
||||
Runnable run = () -> {
|
||||
PreparedStatement preparedSt = null;
|
||||
try {
|
||||
preparedSt = preparedStatement("REPLACE INTO COSMETICDATABASE(UUID,COSMETICS) VALUES(?,?);");
|
||||
try (PreparedStatement preparedSt = preparedStatement("REPLACE INTO COSMETICDATABASE(UUID,COSMETICS) VALUES(?,?);")) {
|
||||
preparedSt.setString(1, user.getUniqueId().toString());
|
||||
preparedSt.setString(2, serializeData(user));
|
||||
preparedSt.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
throw new RuntimeException(e);
|
||||
} finally {
|
||||
try {
|
||||
if (preparedSt != null) preparedSt.close();
|
||||
} catch (SQLException e) {}
|
||||
}
|
||||
};
|
||||
if (!HMCCosmeticsPlugin.getInstance().isDisabled()) {
|
||||
|
||||
@@ -35,10 +35,12 @@ public class SQLiteData extends SQLData {
|
||||
connection = DriverManager.getConnection("jdbc:sqlite:" + dataFolder);
|
||||
|
||||
openConnection();
|
||||
connection.prepareStatement("CREATE TABLE IF NOT EXISTS `COSMETICDATABASE` " +
|
||||
try (PreparedStatement preparedStatement = connection.prepareStatement("CREATE TABLE IF NOT EXISTS `COSMETICDATABASE` " +
|
||||
"(UUID varchar(36) PRIMARY KEY, " +
|
||||
"COSMETICS MEDIUMTEXT " +
|
||||
");").execute();
|
||||
");")) {
|
||||
preparedStatement.execute();
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
@@ -48,17 +50,11 @@ public class SQLiteData extends SQLData {
|
||||
@SuppressWarnings("resource")
|
||||
public void clear(UUID uniqueId) {
|
||||
Bukkit.getScheduler().runTaskAsynchronously(HMCCosmeticsPlugin.getInstance(), () -> {
|
||||
PreparedStatement preparedSt = null;
|
||||
try {
|
||||
preparedSt = preparedStatement("DELETE FROM COSMETICDATABASE WHERE UUID=?;");
|
||||
try (PreparedStatement preparedSt = preparedStatement("DELETE FROM COSMETICDATABASE WHERE UUID=?;")){
|
||||
preparedSt.setString(1, uniqueId.toString());
|
||||
preparedSt.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
try {
|
||||
if (preparedSt != null) preparedSt.close();
|
||||
} catch (SQLException e) {}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class Actions {
|
||||
@@ -30,7 +31,6 @@ public class Actions {
|
||||
private static final ActionCosmeticHide ACTION_HIDE = new ActionCosmeticHide();
|
||||
private static final ActionCosmeticToggle ACTION_TOGGLE = new ActionCosmeticToggle();
|
||||
|
||||
|
||||
public static Action getAction(@NotNull String id) {
|
||||
return actions.get(id.toUpperCase());
|
||||
}
|
||||
@@ -45,13 +45,13 @@ public class Actions {
|
||||
|
||||
public static void runActions(Player viewer, CosmeticHolder cosmeticHolder, @NotNull List<String> raw) {
|
||||
for (String a : raw) {
|
||||
String id = StringUtils.substringBetween(a, "[", "]").toUpperCase();
|
||||
String id = StringUtils.substringBetween(a, "[", "]");
|
||||
String message = StringUtils.substringAfter(a, "] ");
|
||||
MessagesUtil.sendDebugMessages("ID is " + id + " // Raw Data is " + message);
|
||||
if (isAction(id)) {
|
||||
if (id != null && isAction(id.toUpperCase())) {
|
||||
getAction(id).run(viewer, cosmeticHolder, message);
|
||||
} else {
|
||||
MessagesUtil.sendDebugMessages("Possible ids: " + actions.keySet());
|
||||
MessagesUtil.sendDebugMessages("Invalid Action ID (" + id + ") used in menus (Full raw: '" + a + "'). Make sure all actions are properly typed out. Here are all possible actions: " + actions.keySet(), Level.WARNING);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ public class DyeMenu {
|
||||
if (originalItem == null || !cosmetic.isDyeable()) return;
|
||||
|
||||
Gui gui = HMCColorApi.createColorMenu(viewer);
|
||||
gui.updateTitle(AdventureUtils.MINI_MESSAGE.deserialize(Hooks.processPlaceholders(viewer, StringUtils.parseStringToString(Settings.getDyeMenuName()))));
|
||||
gui.updateTitle(AdventureUtils.MINI_MESSAGE.deserialize(Hooks.processPlaceholders(viewer, Settings.getDyeMenuName())));
|
||||
gui.setItem(Settings.getDyeMenuInputSlot(), new GuiItem(originalItem));
|
||||
gui.setDefaultTopClickAction(event -> {
|
||||
if (event.getSlot() == Settings.getDyeMenuOutputSlot()) {
|
||||
|
||||
@@ -66,14 +66,11 @@ public class TypeCosmetic extends Type {
|
||||
|
||||
MessagesUtil.sendDebugMessages("Required click type: " + requiredClick);
|
||||
MessagesUtil.sendDebugMessages("Click type: " + clickType.name());
|
||||
boolean isRequiredClick = requiredClick.equalsIgnoreCase("ANY") || requiredClick.equalsIgnoreCase(clickType.name());
|
||||
boolean isDyeClick = dyeClick.equalsIgnoreCase("ANY") || dyeClick.equalsIgnoreCase(clickType.name());
|
||||
if (!isRequiredClick && !isDyeClick) {
|
||||
MessagesUtil.sendMessage(viewer.getPlayer(), "invalid-click-type");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isRequiredClick && isDyeClick) isUnEquippingCosmetic = false;
|
||||
final boolean isRequiredClick = requiredClick.equalsIgnoreCase("ANY") || requiredClick.equalsIgnoreCase(clickType.name());
|
||||
final boolean isDyeClick = dyeClick.equalsIgnoreCase("ANY") || dyeClick.equalsIgnoreCase(clickType.name());
|
||||
|
||||
if (!isRequiredClick) isUnEquippingCosmetic = false;
|
||||
|
||||
List<String> actionStrings = new ArrayList<>();
|
||||
ConfigurationNode actionConfig = config.node("actions");
|
||||
|
||||
@@ -144,7 +144,7 @@ public class CosmeticUser implements CosmeticHolder {
|
||||
showCosmetics(HiddenReason.GAMEMODE);
|
||||
}
|
||||
|
||||
if (bukkitPlayer != null && Settings.getDisabledWorlds().contains(getEntity().getLocation().getWorld().getName())) {
|
||||
if (bukkitPlayer != null && Settings.getDisabledWorlds().contains(bukkitPlayer.getLocation().getWorld().getName())) {
|
||||
MessagesUtil.sendDebugMessages("Hiding Cosmetics due to world");
|
||||
hideCosmetics(CosmeticUser.HiddenReason.WORLD);
|
||||
} else if (this.isHidden(HiddenReason.WORLD)) {
|
||||
@@ -626,7 +626,12 @@ public class CosmeticUser implements CosmeticHolder {
|
||||
if (isInWardrobe() && !ignoreWardrobe) {
|
||||
if (WardrobeSettings.isTryCosmeticsInWardrobe() && userWardrobeManager.getWardrobeStatus().equals(UserWardrobeManager.WardrobeStatus.RUNNING)) return true;
|
||||
}
|
||||
return getEntity().hasPermission(cosmetic.getPermission());
|
||||
final Player player = getPlayer();
|
||||
if (player != null) return player.hasPermission(cosmetic.getPermission());
|
||||
// This sucks, but basically if we can find a player, use that. If not, try to find the entity. If it can't find the entity, just return false.
|
||||
final Entity entity = getEntity();
|
||||
if (entity != null) return entity.hasPermission(cosmetic.getPermission());
|
||||
return false;
|
||||
}
|
||||
|
||||
public void hidePlayer() {
|
||||
|
||||
@@ -32,7 +32,7 @@ public class TranslationUtil {
|
||||
public static String getTranslation(String key, String message) {
|
||||
List<TranslationPair> pairs = keys.get(key);
|
||||
for (TranslationPair pair : pairs) {
|
||||
if (pair.key().equals(message)) return StringUtils.parseStringToString(pair.value());
|
||||
if (pair.key().equals(message)) return pair.value();
|
||||
}
|
||||
|
||||
return message;
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
#
|
||||
config-version: 1
|
||||
|
||||
default-menu: defaultmenu
|
||||
default-menu: defaultmenu_hats
|
||||
debug-mode: false
|
||||
database-settings:
|
||||
type: sqlite # SQLite (Default), MYSQL, NONE
|
||||
@@ -95,9 +95,9 @@ menu-settings:
|
||||
# Below is the shading mechanism behind cosmetic items. This is a bit complicated, but it allows for a lot of customization.
|
||||
# The shading is done through the title and by shifting textures around. This is done by offsets.
|
||||
# Only Nexo is support by default. Vanilla can't properly handle it without a lot of unicodes and ItemsAdder adds weird offsets and decolors it. (This is why it is disabled by default)
|
||||
enabled: false # Default of menus having shading. This can be toggled individually in menus with "shading: true/false"
|
||||
first-row-shift: "<shift:-169>" # Nexo: "<shift:-169>"
|
||||
sequent-row-shift: " <shift:-169>" # Nexo: " <shift:-169>" (Space is important here!)
|
||||
enabled: true # Default of menus having shading. This can be toggled individually in menus with "shading: true/false"
|
||||
first-row-shift: "<shift:-153>" # Nexo: "<shift:-153>"
|
||||
sequent-row-shift: " <shift:-153>" # Nexo: " <shift:-153>" (Space is important here!)
|
||||
individual-column-shift: "<shift:-3>" # Nexo: "<shift:-3>"
|
||||
background: "<glyph:shade_row_<row>:colorable> " # Nexo: "<glyph:shade_row_<row>:colorable>
|
||||
clear-background: "<glyph:clear_row_<row>:colorable> " # Nexo: "<glyph:clear_row_<row>:colorable> "
|
||||
|
||||
@@ -1,180 +0,0 @@
|
||||
title: "<white>"
|
||||
rows: 6
|
||||
refresh-rate: 20 # Set to -1 or remove to disable auto-updating, leading to it only using event-based updates.
|
||||
items:
|
||||
beanie:
|
||||
slots:
|
||||
- 0
|
||||
item:
|
||||
material: hmccosmetics:beanie
|
||||
lore:
|
||||
- ""
|
||||
- "<gray>Enabled: <#6D9DC5>%HMCCosmetics_equipped_beanie%"
|
||||
- "<gray>Allowed: <#6D9DC5>%HMCCosmetics_unlocked_beanie%"
|
||||
type: cosmetic
|
||||
cosmetic: beanie
|
||||
backpack:
|
||||
slots:
|
||||
- 1
|
||||
item:
|
||||
material: hmccosmetics:backpack
|
||||
lore:
|
||||
- ""
|
||||
- "<gray>Enabled: <#6D9DC5>%HMCCosmetics_equipped_backpack%"
|
||||
- "<gray>Allowed: <#6D9DC5>%HMCCosmetics_unlocked_backpack%"
|
||||
type: cosmetic
|
||||
cosmetic: backpack
|
||||
future_wings:
|
||||
slots:
|
||||
- 2
|
||||
item:
|
||||
material: hmccosmetics:future_wings
|
||||
lore:
|
||||
- ""
|
||||
- "<gray>Enabled: <#6D9DC5>%HMCCosmetics_equipped_future_wings%"
|
||||
- "<gray>Allowed: <#6D9DC5>%HMCCosmetics_unlocked_future_wings%"
|
||||
type: cosmetic
|
||||
cosmetic: future_wings
|
||||
lantern_cosmetic:
|
||||
slots:
|
||||
- 3
|
||||
item:
|
||||
material: hmccosmetics:lantern_cosmetic
|
||||
lore:
|
||||
- ""
|
||||
- "<gray>Enabled: <#6D9DC5>%HMCCosmetics_equipped_lantern_cosmetic%"
|
||||
- "<gray>Allowed: <#6D9DC5>%HMCCosmetics_unlocked_lantern_cosmetic%"
|
||||
type: cosmetic
|
||||
cosmetic: lantern_cosmetic
|
||||
baseball_hat:
|
||||
slots:
|
||||
- 4
|
||||
item:
|
||||
material: hmccosmetics:baseball_hat
|
||||
lore:
|
||||
- ""
|
||||
- "<gray>Enabled: <#6D9DC5>%HMCCosmetics_equipped_baseball_hat%"
|
||||
- "<gray>Allowed: <#6D9DC5>%HMCCosmetics_unlocked_baseball_hat%"
|
||||
type: cosmetic
|
||||
cosmetic: baseball_hat
|
||||
frog_hat:
|
||||
slots:
|
||||
- 5
|
||||
item:
|
||||
material: hmccosmetics:frog_hat
|
||||
lore:
|
||||
- ""
|
||||
- "<gray>Enabled: <#6D9DC5>%HMCCosmetics_equipped_frog_hat%"
|
||||
- "<gray>Allowed: <#6D9DC5>%HMCCosmetics_unlocked_frog_hat%"
|
||||
type: cosmetic
|
||||
cosmetic: frog_hat
|
||||
jetpack:
|
||||
slots:
|
||||
- 6
|
||||
item:
|
||||
material: hmccosmetics:jetpack
|
||||
lore:
|
||||
- ""
|
||||
- "<gray>Enabled: <#6D9DC5>%HMCCosmetics_equipped_jetpack%"
|
||||
- "<gray>Allowed: <#6D9DC5>%HMCCosmetics_unlocked_jetpack%"
|
||||
type: cosmetic
|
||||
cosmetic: jetpack
|
||||
hammer:
|
||||
slots:
|
||||
- 7
|
||||
item:
|
||||
material: hmccosmetics:hammer
|
||||
lore:
|
||||
- ""
|
||||
- "<gray>Enabled: <#6D9DC5>%HMCCosmetics_equipped_hammer%"
|
||||
- "<gray>Allowed: <#6D9DC5>%HMCCosmetics_unlocked_hammer%"
|
||||
type: cosmetic
|
||||
cosmetic: hammer
|
||||
chestplate:
|
||||
slots:
|
||||
- 8
|
||||
item:
|
||||
material: hmccosmetics:chestplate
|
||||
lore:
|
||||
- ""
|
||||
- "<gray>Enabled: <#6D9DC5>%HMCCosmetics_equipped_chestplate%"
|
||||
- "<gray>Allowed: <#6D9DC5>%HMCCosmetics_unlocked_chestplate%"
|
||||
type: cosmetic
|
||||
cosmetic: chestplate
|
||||
pants:
|
||||
slots:
|
||||
- 9
|
||||
item:
|
||||
material: hmccosmetics:pants
|
||||
lore:
|
||||
- ""
|
||||
- "<gray>Enabled: <#6D9DC5>%HMCCosmetics_equipped_pants%"
|
||||
- "<gray>Allowed: <#6D9DC5>%HMCCosmetics_unlocked_pants%"
|
||||
type: cosmetic
|
||||
cosmetic: pants
|
||||
boots:
|
||||
slots:
|
||||
- 10
|
||||
item:
|
||||
material: hmccosmetics:boots
|
||||
lore:
|
||||
- ""
|
||||
- "<gray>Enabled: <#6D9DC5>%HMCCosmetics_equipped_boots%"
|
||||
- "<gray>Allowed: <#6D9DC5>%HMCCosmetics_unlocked_boots%"
|
||||
type: cosmetic
|
||||
cosmetic: boots
|
||||
kite:
|
||||
slots:
|
||||
- 11
|
||||
item:
|
||||
material: hmccosmetics:kite
|
||||
lore:
|
||||
- ""
|
||||
- "<gray>Enabled: <#6D9DC5>%HMCCosmetics_equipped_kite%"
|
||||
- "<gray>Allowed: <#6D9DC5>%HMCCosmetics_unlocked_kite%"
|
||||
type: cosmetic
|
||||
cosmetic: kite
|
||||
explorer_backpack:
|
||||
slots:
|
||||
- 12
|
||||
item:
|
||||
material: hmccosmetics:explorer_backpack
|
||||
lore:
|
||||
- ""
|
||||
- "<gray>Enabled: <#6D9DC5>%HMCCosmetics_equipped_explorer_backpack%"
|
||||
- "<gray>Allowed: <#6D9DC5>%HMCCosmetics_unlocked_explorer_backpack%"
|
||||
type: cosmetic
|
||||
cosmetic: explorer_backpack
|
||||
garbage_truck_balloon:
|
||||
slots:
|
||||
- 13
|
||||
item:
|
||||
material: hmccosmetics:garbage_truck_balloon
|
||||
lore:
|
||||
- ""
|
||||
- "<gray>Enabled: <#6D9DC5>%HMCCosmetics_equipped_garbage_truck_balloon%"
|
||||
- "<gray>Allowed: <#6D9DC5>%HMCCosmetics_unlocked_garbage_truck_balloon%"
|
||||
type: cosmetic
|
||||
cosmetic: garbage_truck_balloon
|
||||
earth_day_grabber:
|
||||
slots:
|
||||
- 14
|
||||
item:
|
||||
material: hmccosmetics:earth_day_grabber
|
||||
lore:
|
||||
- ""
|
||||
- "<gray>Enabled: <#6D9DC5>%HMCCosmetics_equipped_earth_day_grabber%"
|
||||
- "<gray>Allowed: <#6D9DC5>%HMCCosmetics_unlocked_earth_day_grabber%"
|
||||
type: cosmetic
|
||||
cosmetic: earth_day_grabber
|
||||
hibiscus_flower:
|
||||
slots:
|
||||
- 15
|
||||
item:
|
||||
material: hmccosmetics:hibiscus_flower
|
||||
lore:
|
||||
- ""
|
||||
- "<gray>Enabled: <#6D9DC5>%HMCCosmetics_equipped_hibiscus_flower%"
|
||||
- "<gray>Allowed: <#6D9DC5>%HMCCosmetics_unlocked_hibiscus_flower%"
|
||||
type: cosmetic
|
||||
cosmetic: hibiscus_flower
|
||||
99
common/src/main/resources/menus/defaultmenu_backpacks.yml
Executable file
99
common/src/main/resources/menus/defaultmenu_backpacks.yml
Executable file
@@ -0,0 +1,99 @@
|
||||
title: "<white>"
|
||||
rows: 6
|
||||
items:
|
||||
backpack:
|
||||
slots:
|
||||
- 1
|
||||
item:
|
||||
material: hmccosmetics:backpack
|
||||
lore:
|
||||
- ""
|
||||
- "<gray>Enabled: <#6D9DC5>%HMCCosmetics_equipped_backpack%"
|
||||
- "<gray>Allowed: <#6D9DC5>%HMCCosmetics_unlocked_backpack%"
|
||||
type: cosmetic
|
||||
cosmetic: backpack
|
||||
future_wings:
|
||||
slots:
|
||||
- 2
|
||||
item:
|
||||
material: hmccosmetics:future_wings
|
||||
lore:
|
||||
- ""
|
||||
- "<gray>Enabled: <#6D9DC5>%HMCCosmetics_equipped_future_wings%"
|
||||
- "<gray>Allowed: <#6D9DC5>%HMCCosmetics_unlocked_future_wings%"
|
||||
type: cosmetic
|
||||
cosmetic: future_wings
|
||||
jetpack:
|
||||
slots:
|
||||
- 3
|
||||
item:
|
||||
material: hmccosmetics:jetpack
|
||||
lore:
|
||||
- ""
|
||||
- "<gray>Enabled: <#6D9DC5>%HMCCosmetics_equipped_jetpack%"
|
||||
- "<gray>Allowed: <#6D9DC5>%HMCCosmetics_unlocked_jetpack%"
|
||||
type: cosmetic
|
||||
cosmetic: jetpack
|
||||
explorer_backpack:
|
||||
slots:
|
||||
- 4
|
||||
item:
|
||||
material: hmccosmetics:explorer_backpack
|
||||
lore:
|
||||
- ""
|
||||
- "<gray>Enabled: <#6D9DC5>%HMCCosmetics_equipped_explorer_backpack%"
|
||||
- "<gray>Allowed: <#6D9DC5>%HMCCosmetics_unlocked_explorer_backpack%"
|
||||
type: cosmetic
|
||||
cosmetic: explorer_backpack
|
||||
button_backpacks_menu:
|
||||
slots:
|
||||
- 0
|
||||
item:
|
||||
material: PAPER
|
||||
model-data: 18
|
||||
name: "<blue>Backpack Cosmetics"
|
||||
amount: 1
|
||||
type: empty
|
||||
actions:
|
||||
any:
|
||||
- "[MENU] defaultmenu_backpacks"
|
||||
- "[SOUND] minecraft:ui.button.click 1 1"
|
||||
button_hand_menu:
|
||||
slots:
|
||||
- 18
|
||||
item:
|
||||
material: PAPER
|
||||
model-data: 19
|
||||
name: "<blue>Hand Cosmetics"
|
||||
amount: 1
|
||||
type: empty
|
||||
actions:
|
||||
any:
|
||||
- "[MENU] defaultmenu_hands"
|
||||
- "[SOUND] minecraft:ui.button.click 1 1"
|
||||
button_balloon_menu:
|
||||
slots:
|
||||
- 27
|
||||
item:
|
||||
material: PAPER
|
||||
model-data: 20
|
||||
name: "<blue>Balloon Cosmetics"
|
||||
amount: 1
|
||||
type: empty
|
||||
actions:
|
||||
any:
|
||||
- "[MENU] defaultmenu_balloons"
|
||||
- "[SOUND] minecraft:ui.button.click 1 1"
|
||||
button_hats_menu:
|
||||
slots:
|
||||
- 36
|
||||
item:
|
||||
material: PAPER
|
||||
model-data: 17
|
||||
name: "<blue>Hat Cosmetics"
|
||||
amount: 1
|
||||
type: empty
|
||||
actions:
|
||||
any:
|
||||
- "[MENU] defaultmenu_hats"
|
||||
- "[SOUND] minecraft:ui.button.click 1 1"
|
||||
77
common/src/main/resources/menus/defaultmenu_balloons.yml
Executable file
77
common/src/main/resources/menus/defaultmenu_balloons.yml
Executable file
@@ -0,0 +1,77 @@
|
||||
title: "<white>"
|
||||
rows: 6
|
||||
items:
|
||||
garbage_truck_balloon:
|
||||
slots:
|
||||
- 1
|
||||
item:
|
||||
material: hmccosmetics:garbage_truck_balloon
|
||||
lore:
|
||||
- ""
|
||||
- "<gray>Enabled: <#6D9DC5>%HMCCosmetics_equipped_garbage_truck_balloon%"
|
||||
- "<gray>Allowed: <#6D9DC5>%HMCCosmetics_unlocked_garbage_truck_balloon%"
|
||||
type: cosmetic
|
||||
cosmetic: garbage_truck_balloon
|
||||
kite:
|
||||
slots:
|
||||
- 2
|
||||
item:
|
||||
material: hmccosmetics:kite
|
||||
lore:
|
||||
- ""
|
||||
- "<gray>Enabled: <#6D9DC5>%HMCCosmetics_equipped_kite%"
|
||||
- "<gray>Allowed: <#6D9DC5>%HMCCosmetics_unlocked_kite%"
|
||||
type: cosmetic
|
||||
cosmetic: kite
|
||||
button_backpacks_menu:
|
||||
slots:
|
||||
- 27
|
||||
item:
|
||||
material: PAPER
|
||||
model-data: 18
|
||||
name: "<blue>Backpack Cosmetics"
|
||||
amount: 1
|
||||
type: empty
|
||||
actions:
|
||||
any:
|
||||
- "[MENU] defaultmenu_backpacks"
|
||||
- "[SOUND] minecraft:ui.button.click 1 1"
|
||||
button_hand_menu:
|
||||
slots:
|
||||
- 36
|
||||
item:
|
||||
material: PAPER
|
||||
model-data: 19
|
||||
name: "<blue>Hand Cosmetics"
|
||||
amount: 1
|
||||
type: empty
|
||||
actions:
|
||||
any:
|
||||
- "[MENU] defaultmenu_hands"
|
||||
- "[SOUND] minecraft:ui.button.click 1 1"
|
||||
button_balloon_menu:
|
||||
slots:
|
||||
- 0
|
||||
item:
|
||||
material: PAPER
|
||||
model-data: 20
|
||||
name: "<blue>Balloon Cosmetics"
|
||||
amount: 1
|
||||
type: empty
|
||||
actions:
|
||||
any:
|
||||
- "[MENU] defaultmenu_balloons"
|
||||
- "[SOUND] minecraft:ui.button.click 1 1"
|
||||
button_hats_menu:
|
||||
slots:
|
||||
- 18
|
||||
item:
|
||||
material: PAPER
|
||||
model-data: 17
|
||||
name: "<blue>Hat Cosmetics"
|
||||
amount: 1
|
||||
type: empty
|
||||
actions:
|
||||
any:
|
||||
- "[MENU] defaultmenu_hats"
|
||||
- "[SOUND] minecraft:ui.button.click 1 1"
|
||||
99
common/src/main/resources/menus/defaultmenu_hands.yml
Executable file
99
common/src/main/resources/menus/defaultmenu_hands.yml
Executable file
@@ -0,0 +1,99 @@
|
||||
title: "<white>"
|
||||
rows: 6
|
||||
items:
|
||||
lantern_cosmetic:
|
||||
slots:
|
||||
- 1
|
||||
item:
|
||||
material: hmccosmetics:lantern_cosmetic
|
||||
lore:
|
||||
- ""
|
||||
- "<gray>Enabled: <#6D9DC5>%HMCCosmetics_equipped_lantern_cosmetic%"
|
||||
- "<gray>Allowed: <#6D9DC5>%HMCCosmetics_unlocked_lantern_cosmetic%"
|
||||
type: cosmetic
|
||||
cosmetic: lantern_cosmetic
|
||||
hammer:
|
||||
slots:
|
||||
- 2
|
||||
item:
|
||||
material: hmccosmetics:hammer
|
||||
lore:
|
||||
- ""
|
||||
- "<gray>Enabled: <#6D9DC5>%HMCCosmetics_equipped_hammer%"
|
||||
- "<gray>Allowed: <#6D9DC5>%HMCCosmetics_unlocked_hammer%"
|
||||
type: cosmetic
|
||||
cosmetic: hammer
|
||||
earth_day_grabber:
|
||||
slots:
|
||||
- 3
|
||||
item:
|
||||
material: hmccosmetics:earth_day_grabber
|
||||
lore:
|
||||
- ""
|
||||
- "<gray>Enabled: <#6D9DC5>%HMCCosmetics_equipped_earth_day_grabber%"
|
||||
- "<gray>Allowed: <#6D9DC5>%HMCCosmetics_unlocked_earth_day_grabber%"
|
||||
type: cosmetic
|
||||
cosmetic: earth_day_grabber
|
||||
hibiscus_flower:
|
||||
slots:
|
||||
- 4
|
||||
item:
|
||||
material: hmccosmetics:hibiscus_flower
|
||||
lore:
|
||||
- ""
|
||||
- "<gray>Enabled: <#6D9DC5>%HMCCosmetics_equipped_hibiscus_flower%"
|
||||
- "<gray>Allowed: <#6D9DC5>%HMCCosmetics_unlocked_hibiscus_flower%"
|
||||
type: cosmetic
|
||||
cosmetic: hibiscus_flower
|
||||
button_backpacks_menu:
|
||||
slots:
|
||||
- 36
|
||||
item:
|
||||
material: PAPER
|
||||
model-data: 18
|
||||
name: "<blue>Backpack Cosmetics"
|
||||
amount: 1
|
||||
type: empty
|
||||
actions:
|
||||
any:
|
||||
- "[MENU] defaultmenu_backpacks"
|
||||
- "[SOUND] minecraft:ui.button.click 1 1"
|
||||
button_hand_menu:
|
||||
slots:
|
||||
- 0
|
||||
item:
|
||||
material: PAPER
|
||||
model-data: 19
|
||||
name: "<blue>Hand Cosmetics"
|
||||
amount: 1
|
||||
type: empty
|
||||
actions:
|
||||
any:
|
||||
- "[MENU] defaultmenu_hands"
|
||||
- "[SOUND] minecraft:ui.button.click 1 1"
|
||||
button_balloon_menu:
|
||||
slots:
|
||||
- 18
|
||||
item:
|
||||
material: PAPER
|
||||
model-data: 20
|
||||
name: "<blue>Balloon Cosmetics"
|
||||
amount: 1
|
||||
type: empty
|
||||
actions:
|
||||
any:
|
||||
- "[MENU] defaultmenu_balloons"
|
||||
- "[SOUND] minecraft:ui.button.click 1 1"
|
||||
button_hats_menu:
|
||||
slots:
|
||||
- 27
|
||||
item:
|
||||
material: PAPER
|
||||
model-data: 17
|
||||
name: "<blue>Hat Cosmetics"
|
||||
amount: 1
|
||||
type: empty
|
||||
actions:
|
||||
any:
|
||||
- "[MENU] defaultmenu_hats"
|
||||
- "[SOUND] minecraft:ui.button.click 1 1"
|
||||
88
common/src/main/resources/menus/defaultmenu_hats.yml
Executable file
88
common/src/main/resources/menus/defaultmenu_hats.yml
Executable file
@@ -0,0 +1,88 @@
|
||||
title: "<white>"
|
||||
rows: 6
|
||||
items:
|
||||
beanie:
|
||||
slots:
|
||||
- 1
|
||||
item:
|
||||
material: hmccosmetics:beanie
|
||||
lore:
|
||||
- ""
|
||||
- "<gray>Enabled: <#6D9DC5>%HMCCosmetics_equipped_beanie%"
|
||||
- "<gray>Allowed: <#6D9DC5>%HMCCosmetics_unlocked_beanie%"
|
||||
type: cosmetic
|
||||
cosmetic: beanie
|
||||
baseball_hat:
|
||||
slots:
|
||||
- 2
|
||||
item:
|
||||
material: hmccosmetics:baseball_hat
|
||||
lore:
|
||||
- ""
|
||||
- "<gray>Enabled: <#6D9DC5>%HMCCosmetics_equipped_baseball_hat%"
|
||||
- "<gray>Allowed: <#6D9DC5>%HMCCosmetics_unlocked_baseball_hat%"
|
||||
type: cosmetic
|
||||
cosmetic: baseball_hat
|
||||
frog_hat:
|
||||
slots:
|
||||
- 3
|
||||
item:
|
||||
material: hmccosmetics:frog_hat
|
||||
lore:
|
||||
- ""
|
||||
- "<gray>Enabled: <#6D9DC5>%HMCCosmetics_equipped_frog_hat%"
|
||||
- "<gray>Allowed: <#6D9DC5>%HMCCosmetics_unlocked_frog_hat%"
|
||||
type: cosmetic
|
||||
cosmetic: frog_hat
|
||||
button_hats_menu:
|
||||
slots:
|
||||
- 0
|
||||
item:
|
||||
material: PAPER
|
||||
model-data: 17
|
||||
name: "<blue>Hat Cosmetics"
|
||||
amount: 1
|
||||
type: empty
|
||||
actions:
|
||||
any:
|
||||
- "[MENU] defaultmenu_hats"
|
||||
- "[SOUND] minecraft:ui.button.click 1 1"
|
||||
button_backpacks_menu:
|
||||
slots:
|
||||
- 18
|
||||
item:
|
||||
material: PAPER
|
||||
model-data: 18
|
||||
name: "<blue>Backpack Cosmetics"
|
||||
amount: 1
|
||||
type: empty
|
||||
actions:
|
||||
any:
|
||||
- "[MENU] defaultmenu_backpacks"
|
||||
- "[SOUND] minecraft:ui.button.click 1 1"
|
||||
button_hand_menu:
|
||||
slots:
|
||||
- 27
|
||||
item:
|
||||
material: PAPER
|
||||
model-data: 19
|
||||
name: "<blue>Hand Cosmetics"
|
||||
amount: 1
|
||||
type: empty
|
||||
actions:
|
||||
any:
|
||||
- "[MENU] defaultmenu_hands"
|
||||
- "[SOUND] minecraft:ui.button.click 1 1"
|
||||
button_balloon_menu:
|
||||
slots:
|
||||
- 36
|
||||
item:
|
||||
material: PAPER
|
||||
model-data: 20
|
||||
name: "<blue>Balloon Cosmetics"
|
||||
amount: 1
|
||||
type: empty
|
||||
actions:
|
||||
any:
|
||||
- "[MENU] defaultmenu_balloons"
|
||||
- "[SOUND] minecraft:ui.button.click 1 1"
|
||||
Reference in New Issue
Block a user