mirror of
https://github.com/rockyhawk64/CommandPanels.git
synced 2025-11-18 07:14:17 +01:00
4.0.2
This commit is contained in:
parent
74d73aa0de
commit
54be917af7
2
pom.xml
2
pom.xml
@ -111,7 +111,7 @@
|
||||
<dependency>
|
||||
<groupId>io.papermc.paper</groupId>
|
||||
<artifactId>paper-api</artifactId>
|
||||
<version>1.21.7-R0.1-SNAPSHOT</version>
|
||||
<version>1.21.8-R0.1-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
version: 4.0.1
|
||||
version: 4.0.2
|
||||
main: me.rockyhawk.commandpanels.CommandPanels
|
||||
name: CommandPanels
|
||||
author: RockyHawk
|
||||
|
||||
@ -2,7 +2,6 @@ package me.rockyhawk.commandpanels;
|
||||
|
||||
import me.rockyhawk.commandpanels.commands.MainCommand;
|
||||
import me.rockyhawk.commandpanels.commands.TabComplete;
|
||||
import me.rockyhawk.commandpanels.commands.subcommands.GenerateCommand;
|
||||
import me.rockyhawk.commandpanels.formatter.Placeholders;
|
||||
import me.rockyhawk.commandpanels.formatter.TextFormatter;
|
||||
import me.rockyhawk.commandpanels.formatter.data.DataLoader;
|
||||
|
||||
@ -35,7 +35,7 @@ public class CustomForm {
|
||||
// Build the form inputs in order
|
||||
for (int i = 0; i < panel.getOrder().size(); i++) {
|
||||
if (!panel.getOrder().containsKey(String.valueOf(i))) {
|
||||
ctx.text.sendError(player, "Panel order is missing a number");
|
||||
ctx.text.sendError(player, "Panel layout is missing/skipping a number.");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@ -35,7 +35,7 @@ public class SimpleForm {
|
||||
List<FloodgateButton> buttonList = new ArrayList<>();
|
||||
for (int i = 0; i < panel.getOrder().size(); i++) {
|
||||
if(!panel.getOrder().containsKey(String.valueOf(i))){
|
||||
ctx.text.sendError(p,"Panel order is missing a number");
|
||||
ctx.text.sendError(p,"Panel layout is missing/skipping a number.");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
package me.rockyhawk.commandpanels.builder.inventory;
|
||||
|
||||
import io.papermc.paper.datacomponent.DataComponentTypes;
|
||||
import io.papermc.paper.datacomponent.item.TooltipDisplay;
|
||||
import me.rockyhawk.commandpanels.Context;
|
||||
import me.rockyhawk.commandpanels.builder.inventory.items.ItemBuilder;
|
||||
import me.rockyhawk.commandpanels.builder.logic.ConditionNode;
|
||||
@ -14,11 +16,8 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.inventory.InventoryType;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.persistence.PersistentDataType;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class PanelFactory {
|
||||
protected final Context ctx;
|
||||
protected final InventoryPanelBuilder panelBuilder;
|
||||
@ -87,15 +86,12 @@ public class PanelFactory {
|
||||
|
||||
// Fill empty slots if necessary
|
||||
if(fill != null) {
|
||||
ItemMeta meta = fill.getItemMeta();
|
||||
if(meta != null) {
|
||||
// Hide the tooltip for filler items
|
||||
meta.setHideTooltip(true);
|
||||
// Assign data so that the updater will skip over filler items
|
||||
NamespacedKey filler = new NamespacedKey(ctx.plugin, "fill_item");
|
||||
meta.getPersistentDataContainer().set(filler, PersistentDataType.STRING, "true");
|
||||
fill.setItemMeta(meta);
|
||||
}
|
||||
// Hide the tooltip for filler items
|
||||
TooltipDisplay tooltipHidden = TooltipDisplay.tooltipDisplay().hideTooltip(true).build();
|
||||
fill.setData(DataComponentTypes.TOOLTIP_DISPLAY, tooltipHidden);
|
||||
// Assign data so that the updater will skip over filler items
|
||||
NamespacedKey filler = new NamespacedKey(ctx.plugin, "fill_item");
|
||||
fill.editPersistentDataContainer(c -> c.set(filler, PersistentDataType.STRING, "true"));
|
||||
for (int i = 0; i < inv.getSize(); i++) {
|
||||
ItemStack current = inv.getItem(i);
|
||||
if (current == null || current.getType() == Material.AIR) {
|
||||
|
||||
@ -2,20 +2,15 @@ package me.rockyhawk.commandpanels.builder.inventory.items;
|
||||
|
||||
import me.rockyhawk.commandpanels.Context;
|
||||
import me.rockyhawk.commandpanels.builder.PanelBuilder;
|
||||
import me.rockyhawk.commandpanels.builder.inventory.InventoryPanelBuilder;
|
||||
import me.rockyhawk.commandpanels.builder.inventory.items.itemcomponents.*;
|
||||
import me.rockyhawk.commandpanels.builder.inventory.items.materialcomponents.*;
|
||||
import me.rockyhawk.commandpanels.builder.inventory.items.utils.NameHandler;
|
||||
import me.rockyhawk.commandpanels.builder.logic.ConditionNode;
|
||||
import me.rockyhawk.commandpanels.builder.logic.ConditionParser;
|
||||
import me.rockyhawk.commandpanels.session.Panel;
|
||||
import me.rockyhawk.commandpanels.session.inventory.InventoryPanel;
|
||||
import me.rockyhawk.commandpanels.session.inventory.PanelItem;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.persistence.PersistentDataType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@ -51,14 +46,12 @@ public class ItemBuilder {
|
||||
}
|
||||
|
||||
// Use PersistentDataContainer for item recognition
|
||||
ItemMeta meta = itemStack.getItemMeta();
|
||||
NamespacedKey itemId = new NamespacedKey(ctx.plugin, "item_id");
|
||||
NamespacedKey baseItemId = new NamespacedKey(ctx.plugin, "base_item_id");
|
||||
NamespacedKey panelId = new NamespacedKey(ctx.plugin, "panel_id");
|
||||
meta.getPersistentDataContainer().set(itemId, PersistentDataType.STRING, item.id());
|
||||
meta.getPersistentDataContainer().set(panelId, PersistentDataType.STRING, panel.getName());
|
||||
meta.getPersistentDataContainer().set(baseItemId, PersistentDataType.STRING, item.id());
|
||||
itemStack.setItemMeta(meta);
|
||||
itemStack.editPersistentDataContainer(c -> c.set(itemId, PersistentDataType.STRING, item.id()));
|
||||
itemStack.editPersistentDataContainer(c -> c.set(panelId, PersistentDataType.STRING, panel.getName()));
|
||||
itemStack.editPersistentDataContainer(c -> c.set(baseItemId, PersistentDataType.STRING, item.id()));
|
||||
|
||||
// Set item to the slot
|
||||
return itemStack;
|
||||
@ -119,9 +112,10 @@ public class ItemBuilder {
|
||||
// Add Item Components
|
||||
this.itemComponents.add(new EnchantedComponent());
|
||||
this.itemComponents.add(new ItemModelComponent());
|
||||
this.itemComponents.add(new CustomModelDataComponent());
|
||||
this.itemComponents.add(new TooltipComponent());
|
||||
this.itemComponents.add(new BannerComponent());
|
||||
this.itemComponents.add(new LeatherArmorComponent());
|
||||
this.itemComponents.add(new LeatherColorComponent());
|
||||
this.itemComponents.add(new PotionComponent());
|
||||
this.itemComponents.add(new PotionColorComponent());
|
||||
this.itemComponents.add(new DamageComponent());
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
package me.rockyhawk.commandpanels.builder.inventory.items.itemcomponents;
|
||||
|
||||
import io.papermc.paper.datacomponent.DataComponentTypes;
|
||||
import io.papermc.paper.datacomponent.item.BannerPatternLayers;
|
||||
import me.rockyhawk.commandpanels.Context;
|
||||
import me.rockyhawk.commandpanels.builder.inventory.items.ItemComponent;
|
||||
import me.rockyhawk.commandpanels.session.inventory.PanelItem;
|
||||
@ -9,7 +11,6 @@ import org.bukkit.Registry;
|
||||
import org.bukkit.block.banner.Pattern;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.BannerMeta;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@ -20,21 +21,23 @@ public class BannerComponent implements ItemComponent {
|
||||
public ItemStack apply(Context ctx, ItemStack itemStack, Player player, PanelItem item) {
|
||||
if(item.banner().isEmpty()) return itemStack;
|
||||
|
||||
BannerMeta bannerMeta = (BannerMeta) itemStack.getItemMeta();
|
||||
List<Pattern> patterns = new ArrayList<>(); //Load patterns in order top to bottom
|
||||
List<Pattern> patterns = new ArrayList<>();
|
||||
for (String temp : item.banner()) {
|
||||
temp = ctx.text.parseTextToString(player,temp);
|
||||
String[] dyePattern = temp.split(",");
|
||||
|
||||
patterns.add(
|
||||
new Pattern(DyeColor.valueOf(
|
||||
dyePattern[0]),
|
||||
Registry.BANNER_PATTERN.get(NamespacedKey.fromString("minecraft:" + dyePattern[1]))
|
||||
dyePattern[0].toUpperCase()),
|
||||
Registry.BANNER_PATTERN.get(NamespacedKey.fromString("minecraft:" + dyePattern[1].toLowerCase()))
|
||||
)
|
||||
); //load patterns in config: RED,STRIPE_TOP
|
||||
}
|
||||
bannerMeta.setPatterns(patterns);
|
||||
itemStack.setItemMeta(bannerMeta);
|
||||
|
||||
itemStack.setData(
|
||||
DataComponentTypes.BANNER_PATTERNS,
|
||||
BannerPatternLayers.bannerPatternLayers().addAll(patterns)
|
||||
);
|
||||
|
||||
return itemStack;
|
||||
}
|
||||
|
||||
@ -0,0 +1,25 @@
|
||||
package me.rockyhawk.commandpanels.builder.inventory.items.itemcomponents;
|
||||
|
||||
import io.papermc.paper.datacomponent.DataComponentTypes;
|
||||
import io.papermc.paper.datacomponent.item.CustomModelData;
|
||||
import me.rockyhawk.commandpanels.Context;
|
||||
import me.rockyhawk.commandpanels.builder.inventory.items.ItemComponent;
|
||||
import me.rockyhawk.commandpanels.session.inventory.PanelItem;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class CustomModelDataComponent implements ItemComponent {
|
||||
|
||||
@Override
|
||||
public ItemStack apply(Context ctx, ItemStack itemStack, Player player, PanelItem item) {
|
||||
if(item.customModelData() == null) return itemStack;
|
||||
|
||||
itemStack.setData(
|
||||
DataComponentTypes.CUSTOM_MODEL_DATA, CustomModelData.customModelData().addString(
|
||||
ctx.text.parseTextToString(player, item.customModelData())
|
||||
)
|
||||
);
|
||||
|
||||
return itemStack;
|
||||
}
|
||||
}
|
||||
@ -1,12 +1,11 @@
|
||||
package me.rockyhawk.commandpanels.builder.inventory.items.itemcomponents;
|
||||
|
||||
import io.papermc.paper.datacomponent.DataComponentTypes;
|
||||
import me.rockyhawk.commandpanels.Context;
|
||||
import me.rockyhawk.commandpanels.builder.inventory.items.ItemComponent;
|
||||
import me.rockyhawk.commandpanels.session.inventory.PanelItem;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.Damageable;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
public class DamageComponent implements ItemComponent {
|
||||
|
||||
@ -17,18 +16,15 @@ public class DamageComponent implements ItemComponent {
|
||||
//change the damage amount (placeholders accepted)
|
||||
//if the damage is not unbreakable and should be a value
|
||||
if(item.damage().equals("-1")){
|
||||
//if the player wants the item to be unbreakable. Only works in non legacy versions
|
||||
ItemMeta unbreak = itemStack.getItemMeta();
|
||||
unbreak.setUnbreakable(true);
|
||||
itemStack.setItemMeta(unbreak);
|
||||
//if the player wants the item to be unbreakable
|
||||
itemStack.setData(
|
||||
DataComponentTypes.UNBREAKABLE
|
||||
);
|
||||
}else {
|
||||
try {
|
||||
Damageable itemDamage = (Damageable) itemStack.getItemMeta();
|
||||
itemDamage.setDamage(Integer.parseInt(ctx.text.parseTextToString(player, item.damage())));
|
||||
itemStack.setItemMeta(itemDamage);
|
||||
} catch (Exception e) {
|
||||
ctx.text.sendError(player, "Error with Item Damage for: " + item.id());
|
||||
}
|
||||
itemStack.setData(
|
||||
DataComponentTypes.DAMAGE,
|
||||
Integer.parseInt(ctx.text.parseTextToString(player, item.damage()))
|
||||
);
|
||||
}
|
||||
|
||||
return itemStack;
|
||||
|
||||
@ -1,13 +1,20 @@
|
||||
package me.rockyhawk.commandpanels.builder.inventory.items.itemcomponents;
|
||||
|
||||
import io.papermc.paper.datacomponent.DataComponentTypes;
|
||||
import io.papermc.paper.datacomponent.item.ItemEnchantments;
|
||||
import io.papermc.paper.registry.RegistryAccess;
|
||||
import io.papermc.paper.registry.RegistryKey;
|
||||
import me.rockyhawk.commandpanels.Context;
|
||||
import me.rockyhawk.commandpanels.builder.inventory.items.ItemComponent;
|
||||
import me.rockyhawk.commandpanels.session.inventory.PanelItem;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.Registry;
|
||||
import net.kyori.adventure.key.Key;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.intellij.lang.annotations.Subst;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class EnchantedComponent implements ItemComponent {
|
||||
|
||||
@ -15,20 +22,27 @@ public class EnchantedComponent implements ItemComponent {
|
||||
public ItemStack apply(Context ctx, ItemStack itemStack, Player player, PanelItem item) {
|
||||
if(item.enchantments().isEmpty()) return itemStack;
|
||||
|
||||
ItemMeta EnchantMeta;
|
||||
EnchantMeta = itemStack.getItemMeta();
|
||||
Map<Enchantment,Integer> enchantments = new HashMap<>();
|
||||
|
||||
for(String enchantment : item.enchantments()){
|
||||
String[] enchant = ctx.text.parseTextToString(player, enchantment)
|
||||
String[] value = ctx.text.parseTextToString(player, enchantment)
|
||||
.toLowerCase()
|
||||
.split("\\s");
|
||||
NamespacedKey key = enchant[0].contains(":") ?
|
||||
NamespacedKey.fromString(enchant[0]) :
|
||||
NamespacedKey.minecraft(enchant[0]);
|
||||
|
||||
EnchantMeta.addEnchant(Registry.ENCHANTMENT.get(key), Integer.parseInt(enchant[1]), true);
|
||||
@Subst("") String enchant = value[0].contains(":") ? value[0] : "minecraft:" + value[0];
|
||||
int level = Integer.parseInt(value[1]);
|
||||
|
||||
Enchantment enchantmentVal = RegistryAccess.registryAccess()
|
||||
.getRegistry(RegistryKey.ENCHANTMENT)
|
||||
.get(Key.key(enchant));
|
||||
|
||||
enchantments.put(enchantmentVal, level);
|
||||
}
|
||||
itemStack.setItemMeta(EnchantMeta);
|
||||
|
||||
itemStack.setData(
|
||||
DataComponentTypes.ENCHANTMENTS,
|
||||
ItemEnchantments.itemEnchantments(enchantments)
|
||||
);
|
||||
|
||||
return itemStack;
|
||||
}
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
package me.rockyhawk.commandpanels.builder.inventory.items.itemcomponents;
|
||||
|
||||
import io.papermc.paper.datacomponent.DataComponentTypes;
|
||||
import me.rockyhawk.commandpanels.Context;
|
||||
import me.rockyhawk.commandpanels.builder.inventory.items.ItemComponent;
|
||||
import me.rockyhawk.commandpanels.session.inventory.PanelItem;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
public class ItemModelComponent implements ItemComponent {
|
||||
|
||||
@ -14,12 +14,14 @@ public class ItemModelComponent implements ItemComponent {
|
||||
public ItemStack apply(Context ctx, ItemStack itemStack, Player player, PanelItem item) {
|
||||
if(item.itemModel() == null) return itemStack;
|
||||
|
||||
ItemMeta itemMeta = itemStack.getItemMeta();
|
||||
itemMeta.setItemModel(
|
||||
NamespacedKey.fromString(ctx.text.parseTextToString(player, item.itemModel()))
|
||||
NamespacedKey itemModel = NamespacedKey.fromString(ctx.text.parseTextToString(player, item.itemModel()));
|
||||
if(itemModel == null) return itemStack;
|
||||
|
||||
itemStack.setData(
|
||||
DataComponentTypes.ITEM_MODEL,
|
||||
itemModel
|
||||
);
|
||||
|
||||
itemStack.setItemMeta(itemMeta);
|
||||
return itemStack;
|
||||
}
|
||||
}
|
||||
@ -1,68 +0,0 @@
|
||||
package me.rockyhawk.commandpanels.builder.inventory.items.itemcomponents;
|
||||
|
||||
import me.rockyhawk.commandpanels.Context;
|
||||
import me.rockyhawk.commandpanels.builder.inventory.items.ItemComponent;
|
||||
import me.rockyhawk.commandpanels.session.inventory.PanelItem;
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.LeatherArmorMeta;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class LeatherArmorComponent implements ItemComponent {
|
||||
|
||||
@Override
|
||||
public ItemStack apply(Context ctx, ItemStack itemStack, Player player, PanelItem item) {
|
||||
if(item.leatherArmor() == null) return itemStack;
|
||||
|
||||
if (itemStack.getType() == Material.LEATHER_BOOTS ||
|
||||
itemStack.getType() == Material.LEATHER_LEGGINGS ||
|
||||
itemStack.getType() == Material.LEATHER_CHESTPLATE ||
|
||||
itemStack.getType() == Material.LEATHER_HELMET ||
|
||||
itemStack.getType() == Material.LEATHER_HORSE_ARMOR) {
|
||||
|
||||
LeatherArmorMeta leatherMeta = (LeatherArmorMeta) itemStack.getItemMeta();
|
||||
String colourCode = ctx.text.parseTextToString(player, item.leatherArmor());
|
||||
|
||||
if (!colourCode.contains(",")) {
|
||||
//use a color name
|
||||
leatherMeta.setColor(colourCodes.get(colourCode.toUpperCase()));
|
||||
} else {
|
||||
//use RGB sequence
|
||||
int[] colorRGB = {255, 255, 255};
|
||||
int count = 0;
|
||||
for (String colourNum : colourCode.split(",")) {
|
||||
colorRGB[count] = Integer.parseInt(colourNum);
|
||||
count += 1;
|
||||
}
|
||||
leatherMeta.setColor(Color.fromRGB(colorRGB[0], colorRGB[1], colorRGB[2]));
|
||||
}
|
||||
itemStack.setItemMeta(leatherMeta);
|
||||
}
|
||||
|
||||
return itemStack;
|
||||
}
|
||||
|
||||
private final Map<String, Color> colourCodes = new HashMap<>() {{
|
||||
put("AQUA", Color.AQUA);
|
||||
put("BLUE", Color.BLUE);
|
||||
put("GRAY", Color.GRAY);
|
||||
put("GREEN", Color.GREEN);
|
||||
put("RED", Color.RED);
|
||||
put("WHITE", Color.WHITE);
|
||||
put("BLACK", Color.BLACK);
|
||||
put("FUCHSIA", Color.FUCHSIA);
|
||||
put("LIME", Color.LIME);
|
||||
put("MAROON", Color.MAROON);
|
||||
put("NAVY", Color.NAVY);
|
||||
put("OLIVE", Color.OLIVE);
|
||||
put("ORANGE", Color.ORANGE);
|
||||
put("PURPLE", Color.PURPLE);
|
||||
put("SILVER", Color.SILVER);
|
||||
put("TEAL", Color.TEAL);
|
||||
put("YELLOW", Color.YELLOW);
|
||||
}};
|
||||
}
|
||||
@ -0,0 +1,28 @@
|
||||
package me.rockyhawk.commandpanels.builder.inventory.items.itemcomponents;
|
||||
|
||||
import io.papermc.paper.datacomponent.DataComponentTypes;
|
||||
import io.papermc.paper.datacomponent.item.DyedItemColor;
|
||||
import me.rockyhawk.commandpanels.Context;
|
||||
import me.rockyhawk.commandpanels.builder.inventory.items.ItemComponent;
|
||||
import me.rockyhawk.commandpanels.session.inventory.PanelItem;
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class LeatherColorComponent implements ItemComponent {
|
||||
|
||||
@Override
|
||||
public ItemStack apply(Context ctx, ItemStack itemStack, Player player, PanelItem item) {
|
||||
if (item.leatherColor() == null) return itemStack;
|
||||
|
||||
String[] rgb = ctx.text.parseTextToString(player, item.leatherColor()).split(",");
|
||||
Color colour = Color.fromRGB(Integer.parseInt(rgb[0]), Integer.parseInt(rgb[1]), Integer.parseInt(rgb[2]));
|
||||
|
||||
itemStack.setData(
|
||||
DataComponentTypes.DYED_COLOR,
|
||||
DyedItemColor.dyedItemColor().color(colour)
|
||||
);
|
||||
|
||||
return itemStack;
|
||||
}
|
||||
}
|
||||
@ -1,12 +1,13 @@
|
||||
package me.rockyhawk.commandpanels.builder.inventory.items.itemcomponents;
|
||||
|
||||
import io.papermc.paper.datacomponent.DataComponentTypes;
|
||||
import io.papermc.paper.datacomponent.item.PotionContents;
|
||||
import me.rockyhawk.commandpanels.Context;
|
||||
import me.rockyhawk.commandpanels.builder.inventory.items.ItemComponent;
|
||||
import me.rockyhawk.commandpanels.session.inventory.PanelItem;
|
||||
import org.bukkit.Color;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.PotionMeta;
|
||||
|
||||
public class PotionColorComponent implements ItemComponent {
|
||||
|
||||
@ -15,11 +16,13 @@ public class PotionColorComponent implements ItemComponent {
|
||||
if(item.potionColor() == null) return itemStack;
|
||||
|
||||
String[] rgb = ctx.text.parseTextToString(player, item.potionColor()).split(",");
|
||||
Color color = Color.fromRGB(Integer.parseInt(rgb[0]), Integer.parseInt(rgb[1]), Integer.parseInt(rgb[2]));
|
||||
PotionMeta potionMeta = (PotionMeta) itemStack.getItemMeta();
|
||||
Color colour = Color.fromRGB(Integer.parseInt(rgb[0]), Integer.parseInt(rgb[1]), Integer.parseInt(rgb[2]));
|
||||
|
||||
itemStack.setData(
|
||||
DataComponentTypes.POTION_CONTENTS,
|
||||
PotionContents.potionContents().customColor(colour)
|
||||
);
|
||||
|
||||
potionMeta.setColor(color);
|
||||
itemStack.setItemMeta(potionMeta);
|
||||
return itemStack;
|
||||
}
|
||||
}
|
||||
@ -16,17 +16,14 @@ public class PotionComponent implements ItemComponent {
|
||||
|
||||
//if the item is a potion, give it an effect
|
||||
String[] effectType = ctx.text.parseTextToString(player,item.potion()).split("\\s");
|
||||
try {
|
||||
PotionMeta potionMeta = (PotionMeta) itemStack.getItemMeta();
|
||||
assert potionMeta != null;
|
||||
PotionType newData = PotionType.valueOf(effectType[0].toUpperCase());
|
||||
//set meta
|
||||
potionMeta.setBasePotionType(newData);
|
||||
itemStack.setItemMeta(potionMeta);
|
||||
} catch (Exception er) {
|
||||
//don't add the effect
|
||||
ctx.text.sendError(player, "Error with Potion for item: " + item.id());
|
||||
}
|
||||
|
||||
PotionMeta potionMeta = (PotionMeta) itemStack.getItemMeta();
|
||||
assert potionMeta != null;
|
||||
PotionType newData = PotionType.valueOf(effectType[0].toUpperCase());
|
||||
|
||||
//set meta
|
||||
potionMeta.setBasePotionType(newData);
|
||||
itemStack.setItemMeta(potionMeta);
|
||||
|
||||
return itemStack;
|
||||
}
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
package me.rockyhawk.commandpanels.builder.inventory.items.itemcomponents;
|
||||
|
||||
import io.papermc.paper.datacomponent.DataComponentTypes;
|
||||
import me.rockyhawk.commandpanels.Context;
|
||||
import me.rockyhawk.commandpanels.builder.inventory.items.ItemComponent;
|
||||
import me.rockyhawk.commandpanels.session.inventory.PanelItem;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
public class TooltipComponent implements ItemComponent {
|
||||
|
||||
@ -14,9 +14,10 @@ public class TooltipComponent implements ItemComponent {
|
||||
public ItemStack apply(Context ctx, ItemStack itemStack, Player player, PanelItem item) {
|
||||
if(item.tooltipStyle() == null) return itemStack;
|
||||
|
||||
ItemMeta itemMeta = itemStack.getItemMeta();
|
||||
itemMeta.setTooltipStyle(NamespacedKey.fromString(ctx.text.parseTextToString(player, item.tooltipStyle())));
|
||||
itemStack.setItemMeta(itemMeta);
|
||||
NamespacedKey tooltipStyle = NamespacedKey.fromString(ctx.text.parseTextToString(player, item.tooltipStyle()));
|
||||
|
||||
itemStack.setData(DataComponentTypes.TOOLTIP_STYLE,
|
||||
tooltipStyle);
|
||||
|
||||
return itemStack;
|
||||
}
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
package me.rockyhawk.commandpanels.builder.inventory.items.itemcomponents;
|
||||
|
||||
import io.papermc.paper.datacomponent.DataComponentTypes;
|
||||
import io.papermc.paper.datacomponent.item.ItemArmorTrim;
|
||||
import me.rockyhawk.commandpanels.Context;
|
||||
import me.rockyhawk.commandpanels.builder.inventory.items.ItemComponent;
|
||||
import me.rockyhawk.commandpanels.session.inventory.PanelItem;
|
||||
@ -7,7 +9,6 @@ import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.Registry;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ArmorMeta;
|
||||
import org.bukkit.inventory.meta.trim.ArmorTrim;
|
||||
import org.bukkit.inventory.meta.trim.TrimMaterial;
|
||||
import org.bukkit.inventory.meta.trim.TrimPattern;
|
||||
@ -29,17 +30,17 @@ public class TrimComponent implements ItemComponent {
|
||||
String trimMaterialString = trimList[0].toLowerCase();
|
||||
String trimPatternString = trimList[1].toLowerCase();
|
||||
|
||||
// Check if Material and Pattern are valid and the itemstack is an armor piece
|
||||
// Check if Material and Pattern are valid and the item stack is an armor piece
|
||||
if (isTrimMaterial(trimMaterialString) && isTrimPattern(trimPatternString)) {
|
||||
|
||||
// Getting the correct Pattern and Material - Seems to be experimental this way
|
||||
// Getting the correct Pattern and Material
|
||||
// Material and Pattern don't have a valueOf-function to get them the easier way.
|
||||
TrimMaterial trimMaterial = Registry.TRIM_MATERIAL.get(NamespacedKey.fromString("minecraft:" + trimMaterialString));
|
||||
TrimPattern trimPattern = Registry.TRIM_PATTERN.get(NamespacedKey.fromString("minecraft:" + trimPatternString));
|
||||
|
||||
ArmorMeta armorMeta = (ArmorMeta) itemStack.getItemMeta();
|
||||
armorMeta.setTrim(new ArmorTrim(trimMaterial, trimPattern));
|
||||
itemStack.setItemMeta(armorMeta);
|
||||
ArmorTrim trim = new ArmorTrim(trimMaterial, trimPattern);
|
||||
itemStack.setData(DataComponentTypes.TRIM,
|
||||
ItemArmorTrim.itemArmorTrim(trim));
|
||||
}
|
||||
|
||||
return itemStack;
|
||||
|
||||
@ -19,7 +19,6 @@ public class HeadDatabaseComponent implements MaterialComponent {
|
||||
if (Bukkit.getServer().getPluginManager().isPluginEnabled("HeadDatabase")) {
|
||||
HeadDatabaseAPI api;
|
||||
api = new HeadDatabaseAPI();
|
||||
|
||||
return api.getItemHead(head);
|
||||
} else {
|
||||
ctx.text.sendWarn(player, "Download the HeadDatabase plugin to use this feature!");
|
||||
|
||||
@ -14,9 +14,8 @@ public class ItemsAdderComponent implements MaterialComponent {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack createItem(Context ctx, String tag, Player player, PanelItem item) {
|
||||
String namespaceID = tag.split("\\s")[1];
|
||||
CustomStack stack = CustomStack.getInstance(namespaceID);
|
||||
public ItemStack createItem(Context ctx, String itemID, Player player, PanelItem item) {
|
||||
CustomStack stack = CustomStack.getInstance(itemID);
|
||||
return stack.getItemStack().clone();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -19,13 +19,9 @@ public class MMOItemsComponent implements MaterialComponent {
|
||||
String itemType = tag.split("\\s")[1];
|
||||
String itemID = tag.split("\\s")[2];
|
||||
|
||||
try {
|
||||
MMOItem mmoitem = MMOItems.plugin.getMMOItem(MMOItems.plugin.getTypes().get(itemType), itemID);
|
||||
if(mmoitem != null){
|
||||
return mmoitem.newBuilder().build();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
ctx.text.sendError(player, "Error with MMOItems Material Tag: " + itemID);
|
||||
MMOItem mmoitem = MMOItems.plugin.getMMOItem(MMOItems.plugin.getTypes().get(itemType), itemID);
|
||||
if(mmoitem != null){
|
||||
return mmoitem.newBuilder().build();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@ -16,13 +16,9 @@ public class NexoComponent implements MaterialComponent {
|
||||
|
||||
@Override
|
||||
public ItemStack createItem(Context ctx, String itemID, Player player, PanelItem item) {
|
||||
try {
|
||||
ItemBuilder builder = NexoItems.itemFromId(itemID);
|
||||
if (builder != null) {
|
||||
return builder.build();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
ctx.text.sendError(player, "Error with Nexo Material Tag: " + itemID);
|
||||
ItemBuilder builder = NexoItems.itemFromId(itemID);
|
||||
if (builder != null) {
|
||||
return builder.build();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@ -1,14 +1,13 @@
|
||||
package me.rockyhawk.commandpanels.builder.inventory.items.utils;
|
||||
|
||||
import io.papermc.paper.datacomponent.DataComponentTypes;
|
||||
import io.papermc.paper.datacomponent.item.ItemLore;
|
||||
import io.papermc.paper.datacomponent.item.TooltipDisplay;
|
||||
import me.rockyhawk.commandpanels.Context;
|
||||
import me.rockyhawk.commandpanels.session.inventory.PanelItem;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemFlag;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.persistence.PersistentDataType;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -23,48 +22,40 @@ public class NameHandler {
|
||||
}
|
||||
|
||||
public ItemStack setName(ItemStack item, PanelItem panelItem, Player player) {
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
if (meta == null) return item;
|
||||
|
||||
boolean attributes = Boolean.parseBoolean(
|
||||
ctx.text.parseTextToString(player,panelItem.attributes()));
|
||||
if (!attributes) {
|
||||
hideAttributes(meta);
|
||||
TooltipDisplay hideAttributes = TooltipDisplay.tooltipDisplay()
|
||||
.addHiddenComponents(
|
||||
DataComponentTypes.POTION_CONTENTS,
|
||||
DataComponentTypes.ENCHANTMENTS,
|
||||
DataComponentTypes.ATTRIBUTE_MODIFIERS,
|
||||
DataComponentTypes.DYED_COLOR,
|
||||
DataComponentTypes.TRIM,
|
||||
DataComponentTypes.BANNER_PATTERNS
|
||||
).build();
|
||||
item.setData(DataComponentTypes.TOOLTIP_DISPLAY, hideAttributes);
|
||||
}
|
||||
|
||||
boolean tooltip = Boolean.parseBoolean(
|
||||
ctx.text.parseTextToString(player,panelItem.tooltip()));
|
||||
if (!tooltip) {
|
||||
meta.setHideTooltip(true);
|
||||
TooltipDisplay tooltipHidden = TooltipDisplay.tooltipDisplay().hideTooltip(true).build();
|
||||
item.setData(DataComponentTypes.TOOLTIP_DISPLAY, tooltipHidden);
|
||||
}
|
||||
|
||||
String name = panelItem.displayName();
|
||||
if (!name.isEmpty()) {
|
||||
meta.displayName(ctx.text.parseTextToComponent(player, name));
|
||||
item.setData(DataComponentTypes.ITEM_NAME,
|
||||
ctx.text.parseTextToComponent(player, name));
|
||||
}
|
||||
|
||||
List<String> lore = panelItem.lore();
|
||||
if (!lore.isEmpty()) {
|
||||
List<Component> formattedLore = loreFormatter.format(lore, player);
|
||||
meta.lore(formattedLore);
|
||||
item.setData(DataComponentTypes.LORE, ItemLore.lore(
|
||||
formattedLore));
|
||||
}
|
||||
|
||||
// Add CommandPanels PersistentData
|
||||
NamespacedKey namespacedKey = new NamespacedKey(ctx.plugin, "panel_item_id");
|
||||
meta.getPersistentDataContainer().set(namespacedKey, PersistentDataType.STRING, name);
|
||||
item.setItemMeta(meta);
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
private void hideAttributes(ItemMeta meta) {
|
||||
meta.addItemFlags(
|
||||
ItemFlag.HIDE_ENCHANTS,
|
||||
ItemFlag.HIDE_ATTRIBUTES,
|
||||
ItemFlag.HIDE_ARMOR_TRIM,
|
||||
ItemFlag.HIDE_DYE,
|
||||
ItemFlag.HIDE_UNBREAKABLE,
|
||||
ItemFlag.HIDE_PLACED_ON
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -12,6 +12,7 @@ import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.intellij.lang.annotations.Subst;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class TextFormatter {
|
||||
@ -58,6 +59,7 @@ public class TextFormatter {
|
||||
return deserializeAppropriately(input);
|
||||
}
|
||||
|
||||
@Subst("")
|
||||
@NotNull
|
||||
public String parseTextToString(Player player, String input) {
|
||||
Component component = parseTextToComponent(player, input);
|
||||
@ -75,8 +77,8 @@ public class TextFormatter {
|
||||
private Component deserializeAppropriately(String input) {
|
||||
try {
|
||||
Component component;
|
||||
if (containsLegacyColorCodes(input)) {
|
||||
component = legacySerializer.deserialize(input.replace('&', '§'));
|
||||
if (containsLegacyCodes(input)) {
|
||||
component = legacySerializer.deserialize(input.replaceAll("(?i)&([0-9a-fk-or])", "§$1"));
|
||||
} else {
|
||||
component = miniMessage.deserialize(input);
|
||||
}
|
||||
@ -94,9 +96,9 @@ public class TextFormatter {
|
||||
}
|
||||
}
|
||||
|
||||
private boolean containsLegacyColorCodes(String input) {
|
||||
// Simple check for common legacy indicators
|
||||
return input.contains("&") || input.contains("§");
|
||||
// Check for legacy codes with regex
|
||||
private boolean containsLegacyCodes(String input) {
|
||||
return input.matches(".*&[0-9a-fk-or].*");
|
||||
}
|
||||
|
||||
public TextComponent getTag() {
|
||||
|
||||
@ -54,7 +54,7 @@ public class RequirementRunner {
|
||||
}
|
||||
|
||||
if (!matched) {
|
||||
ctx.text.sendError(player, "Unknown requirement tag: " + tag);
|
||||
ctx.text.sendError(player, "Unknown requirement tag.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -14,7 +14,7 @@ public class XpTag implements RequirementTagResolver {
|
||||
|
||||
@Override
|
||||
public boolean check(Context ctx, Panel panel, Player player, String args) {
|
||||
String[] split = args.trim().split(" ");
|
||||
String[] split = args.trim().split("\\s");
|
||||
if (split.length != 2) {
|
||||
ctx.text.sendError(player, "Invalid XP requirement. Use: [xp] <levels|points> <amount>");
|
||||
return false;
|
||||
|
||||
@ -24,7 +24,8 @@ public record PanelItem(
|
||||
ClickActions shiftRightClick,
|
||||
String damage,
|
||||
String itemModel,
|
||||
String leatherArmor,
|
||||
String customModelData,
|
||||
String leatherColor,
|
||||
String armorTrim,
|
||||
String potionColor,
|
||||
String potion,
|
||||
@ -50,7 +51,8 @@ public record PanelItem(
|
||||
ClickActions shiftRightClick,
|
||||
String damage,
|
||||
String itemModel,
|
||||
String leatherArmor,
|
||||
String customModelData,
|
||||
String leatherColor,
|
||||
String armorTrim,
|
||||
String potionColor,
|
||||
String potion,
|
||||
@ -75,7 +77,8 @@ public record PanelItem(
|
||||
this.shiftRightClick = shiftRightClick;
|
||||
this.damage = damage;
|
||||
this.itemModel = itemModel;
|
||||
this.leatherArmor = leatherArmor;
|
||||
this.customModelData = customModelData;
|
||||
this.leatherColor = leatherColor;
|
||||
this.armorTrim = armorTrim;
|
||||
this.potionColor = potionColor;
|
||||
this.potion = potion;
|
||||
@ -103,7 +106,8 @@ public record PanelItem(
|
||||
|
||||
String damage = section.getString("damage", "0");
|
||||
String itemModel = section.getString("item-model", null);
|
||||
String leatherArmor = section.getString("leather-armor", null);
|
||||
String customModelData = section.getString("custom-model-data", null);
|
||||
String leatherColor = section.getString("leather-color", null);
|
||||
String armorTrim = section.getString("armor-trim", null);
|
||||
String potionColor = section.getString("potion-color", null);
|
||||
String potion = section.getString("potion", null);
|
||||
@ -130,7 +134,8 @@ public record PanelItem(
|
||||
shiftRightClick,
|
||||
damage,
|
||||
itemModel,
|
||||
leatherArmor,
|
||||
customModelData,
|
||||
leatherColor,
|
||||
armorTrim,
|
||||
potionColor,
|
||||
potion,
|
||||
|
||||
@ -14,6 +14,6 @@ public class ArmorColorResolver implements ItemResolver {
|
||||
if (!(item.getItemMeta() instanceof LeatherArmorMeta meta)) return;
|
||||
|
||||
Color color = meta.getColor();
|
||||
itemData.put("leather-armor", color.getRed() + "," + color.getGreen() + "," + color.getBlue());
|
||||
itemData.put("leather-color", color.getRed() + "," + color.getGreen() + "," + color.getBlue());
|
||||
}
|
||||
}
|
||||
@ -19,8 +19,6 @@ import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.persistence.PersistentDataContainer;
|
||||
import org.bukkit.persistence.PersistentDataType;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ClickEvents implements Listener {
|
||||
|
||||
private final Context ctx;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user