mirror of
https://github.com/HibiscusMC/HibiscusCommons.git
synced 2026-01-06 15:51:55 +00:00
fix: lore append mode being funky
This commit is contained in:
@@ -68,7 +68,10 @@ public class ItemBuilderSerializer implements TypeSerializer<ItemBuilder> {
|
||||
if (!nameNode.virtual()) builder.name(nameNode.getString(""));
|
||||
if (!unbreakableNode.virtual()) builder.unbreakable(unbreakableNode.getBoolean());
|
||||
if (!glowingNode.virtual()) builder.glowing(glowingNode.getBoolean());
|
||||
if (!loreNode.virtual()) builder.lore(new ArrayList<>(loreNode.getList(String.class, new ArrayList<>())));
|
||||
if (!loreNode.virtual()) {
|
||||
builder.hasLore(true);
|
||||
builder.lore(new ArrayList<>(loreNode.getList(String.class, new ArrayList<>())));
|
||||
}
|
||||
if (!appendLoreNode.virtual()) {
|
||||
String loreAppendMode = appendLoreNode.getString("").toUpperCase();
|
||||
if (EnumUtils.isValidEnum(LoreAppendMode.class, loreAppendMode)) builder.loreAppendMode(LoreAppendMode.valueOf(loreAppendMode));
|
||||
|
||||
@@ -37,6 +37,7 @@ public class ItemBuilder {
|
||||
private LoreAppendMode loreAppendMode;
|
||||
private boolean unbreakable = false;
|
||||
private boolean glowing = false;
|
||||
private boolean hasLore = false;
|
||||
private Color color;
|
||||
|
||||
public static @NotNull ItemBuilder of(@NotNull String material) {
|
||||
@@ -73,7 +74,10 @@ public class ItemBuilder {
|
||||
this.texture = skullMeta.getPersistentDataContainer().get(InventoryUtils.getSkullTexture(), PersistentDataType.STRING);
|
||||
}
|
||||
}
|
||||
if (meta.hasLore()) this.lore = new ArrayList<>(Objects.requireNonNullElse(meta.getLore(), new ArrayList<>()));
|
||||
if (meta.hasLore()) {
|
||||
this.lore = new ArrayList<>(Objects.requireNonNullElse(meta.getLore(), new ArrayList<>()));
|
||||
hasLore = true;
|
||||
}
|
||||
if (meta instanceof Colorable colorable) {
|
||||
this.color = colorable.getColor().getColor();
|
||||
}
|
||||
@@ -172,6 +176,11 @@ public class ItemBuilder {
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemBuilder hasLore(boolean hasLore) {
|
||||
this.hasLore = hasLore;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ItemBuilder loreUsingComponents(@NotNull List<Component> lore) {
|
||||
this.lore = lore.stream()
|
||||
.map(component -> MiniMessage.miniMessage().serialize(component))
|
||||
@@ -383,34 +392,35 @@ public class ItemBuilder {
|
||||
if (meta == null) meta = Objects.requireNonNull(Bukkit.getItemFactory().getItemMeta(itemStack.getType()));
|
||||
if (display != null) meta.setDisplayName(StringUtils.parseStringToString(display));
|
||||
if (model >= 0) meta.setCustomModelData(model);
|
||||
if (!lore.isEmpty()) {
|
||||
meta.setUnbreakable(unbreakable);
|
||||
List<String> itemLore = Objects.requireNonNullElse(meta.getLore(), new ArrayList<>());
|
||||
List<String> lore = new ArrayList<>();
|
||||
LoreAppendMode mode = loreAppendMode;
|
||||
meta.setUnbreakable(unbreakable);
|
||||
|
||||
if (!meta.hasLore() && loreAppendMode == null) mode = LoreAppendMode.IGNORE;
|
||||
switch (mode) {
|
||||
case IGNORE: // DM lore is not added at all
|
||||
lore.addAll(itemLore);
|
||||
break;
|
||||
case TOP: // DM lore is added at the top
|
||||
lore.addAll(this.lore);
|
||||
lore.addAll(itemLore);
|
||||
break;
|
||||
case BOTTOM: // DM lore is bottom at the bottom
|
||||
lore.addAll(itemLore);
|
||||
lore.addAll(this.lore);
|
||||
break;
|
||||
case OVERRIDE: // Lore from DM overrides the lore from the item
|
||||
lore.addAll(this.lore);
|
||||
break;
|
||||
}
|
||||
List<String> lore = new ArrayList<>();
|
||||
List<String> itemLore = Objects.requireNonNullElse(meta.getLore(), new ArrayList<>());
|
||||
|
||||
lore.forEach(StringUtils::parseStringToString);
|
||||
meta.setLore(lore);
|
||||
LoreAppendMode mode = loreAppendMode;
|
||||
if (mode == null) mode = LoreAppendMode.OVERRIDE;
|
||||
if (!hasLore && loreAppendMode == null) mode = LoreAppendMode.IGNORE;
|
||||
switch (mode) {
|
||||
case IGNORE: // Additional Lore is not added at all
|
||||
lore.addAll(itemLore);
|
||||
break;
|
||||
case TOP: // Additional lore is added at the top
|
||||
lore.addAll(this.lore);
|
||||
lore.addAll(itemLore);
|
||||
break;
|
||||
case BOTTOM: // Additional lore is bottom at the bottom
|
||||
lore.addAll(itemLore);
|
||||
lore.addAll(this.lore);
|
||||
break;
|
||||
case OVERRIDE: // Additonal Lore overrides the lore from the item
|
||||
lore.addAll(this.lore);
|
||||
break;
|
||||
}
|
||||
|
||||
meta.setLore(lore.stream()
|
||||
.map(StringUtils::parseStringToString)
|
||||
.collect(Collectors.toList()));
|
||||
|
||||
if (meta instanceof SkullMeta skullMeta) {
|
||||
if (skullOwner != null) {
|
||||
if (skullOwner.contains("%")) {
|
||||
|
||||
Reference in New Issue
Block a user