Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ public void loadSelf(SkriptAddon addon) {
EffSendTitle::register,
ExprColored::register,
ExprRawString::register,
ExprItemHoverText::register,
ExprStringColor::register
);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package org.skriptlang.skript.bukkit.text.elements.expressions;

import ch.njol.skript.doc.Description;
import ch.njol.skript.doc.Example;
import ch.njol.skript.doc.Name;
import ch.njol.skript.doc.Since;
import ch.njol.skript.expressions.base.SimplePropertyExpression;
import net.kyori.adventure.text.Component;
import org.bukkit.event.Event;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.registration.SyntaxInfo;
import org.skriptlang.skript.registration.SyntaxRegistry;

@Name("Show Item Hover Component")
@Description("""
Creates a '<hover:show_item:...>' component from an item stack, which can be used to show the item's hover text in chat.
""")
@Example("""
on right click on a chest:
send "Contents:"
loop items in inventory of event-block:
send formatted " - %item hover text of loop-item%%loop-item%"
""")
@Since("INSERT VERSION")
public class ExprItemHoverText extends SimplePropertyExpression<ItemStack, Component> {

public static void register(SyntaxRegistry registry) {
registry.register(SyntaxRegistry.EXPRESSION,
SyntaxInfo.Expression.builder(ExprItemHoverText.class, Component.class)
.addPattern("[a[n]] [show] item hover [text] component (for|using|from) %itemstacks%")
.supplier(ExprItemHoverText::new)
.build());
}

@Override
public Component convert(ItemStack from) {
return Component.empty().hoverEvent(from.asHoverEvent());
}

@Override
public Class<? extends Component> getReturnType() {
return Component.class;
}

@Override
protected String getPropertyName() {
throw new IllegalStateException("toString should be overridden");
}

@Override
public String toString(@Nullable Event event, boolean debug) {
return "item hover component for " + getExpr().toString(event, debug);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
test "item hover text":
assert item hover component for a diamond sword is formatted "<hover:show_item:diamond_sword>"
assert a show item hover component from 33 carrots is formatted "<hover:show_item:carrot:33>"
if running minecraft "1.21.5":
assert an item hover component using 99 carrots of mending 2 is formatted "<hover:show_item:carrot:99:enchantments:'{""minecraft:mending"":2}'>"
else:
assert an item hover component using 99 carrots of mending 2 is formatted "<hover:show_item:carrot:99:enchantments:'{levels:{""minecraft:mending"":2}}'>"