package tc.oc.commons.bukkit.item;
import com.google.inject.assistedinject.Assisted;
import com.google.inject.assistedinject.AssistedInject;
import net.md_5.bungee.api.chat.BaseComponent;
import org.bukkit.Material;
import org.bukkit.command.CommandSender;
import org.bukkit.inventory.ItemStack;
import tc.oc.commons.bukkit.chat.ComponentRenderContext;
/**
* Extends {@link ItemBuilder} with server-rendered component support.
*
* Instances are created for a specific viewer, and all text is rendered for that viewer.
*/
public class RenderedItemBuilder<S extends RenderedItemBuilder<?>> extends ItemBuilder<S> {
public interface Factory {
RenderedItemBuilder<?> create(CommandSender viewer);
RenderedItemBuilder<?> create(CommandSender viewer, ItemStack stack);
}
private final CommandSender viewer;
private final ComponentRenderContext renderer;
@AssistedInject protected RenderedItemBuilder(@Assisted CommandSender viewer, ComponentRenderContext renderer) {
this(viewer, new ItemStack(Material.AIR), renderer);
}
@AssistedInject protected RenderedItemBuilder(@Assisted CommandSender viewer, @Assisted ItemStack stack, ComponentRenderContext renderer) {
super(stack);
this.viewer = viewer;
this.renderer = renderer;
}
public S name(BaseComponent name) {
return name(renderer.renderLegacy(name, viewer));
}
public S lore(BaseComponent lore) {
return lore(renderer.renderLegacy(lore, viewer));
}
}