9
0
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:
LoJoSho
2024-03-18 15:03:40 -05:00
parent 3320967a53
commit 024c3c57e8
2 changed files with 39 additions and 26 deletions

View File

@@ -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));

View File

@@ -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("%")) {