Search in sources :

Example 21 with Client

use of net.runelite.api.Client in project runelite by runelite.

the class ChatMessageManager method add.

private void add(QueuedMessage message) {
    final Client client = clientProvider.get();
    // this updates chat cycle
    client.addChatMessage(message.getType(), MoreObjects.firstNonNull(message.getName(), ""), MoreObjects.firstNonNull(message.getValue(), message.getRuneLiteFormattedMessage()), message.getSender());
    // Get last message from line buffer (the one we just added)
    final ChatLineBuffer chatLineBuffer = client.getChatLineMap().get(message.getType().getType());
    final MessageNode[] lines = chatLineBuffer.getLines();
    final MessageNode line = lines[0];
    // Update the message with RuneLite additions
    line.setRuneLiteFormatMessage(message.getRuneLiteFormattedMessage());
    update(line);
}
Also used : ChatLineBuffer(net.runelite.api.ChatLineBuffer) MessageNode(net.runelite.api.MessageNode) Client(net.runelite.api.Client)

Example 22 with Client

use of net.runelite.api.Client in project runelite by runelite.

the class KourendLibraryOverlay method render.

@Override
public Dimension render(Graphics2D g) {
    Player player = client.getLocalPlayer();
    if (player == null) {
        return null;
    }
    WorldPoint playerLoc = player.getWorldLocation();
    if (playerLoc.distanceTo2D(LIBRARY_CENTER) > ROUGH_ENABLE_DISTANCE) {
        return null;
    }
    List<Bookcase> allBookcases = library.getBookcasesOnLevel(client.getPlane());
    if (allBookcases == null) {
        return null;
    }
    for (Bookcase bookcase : allBookcases) {
        // AABB
        WorldPoint caseLoc = bookcase.getLocation();
        if (Math.abs(playerLoc.getX() - caseLoc.getX()) > MAXIMUM_DISTANCE || Math.abs(playerLoc.getY() - caseLoc.getY()) > MAXIMUM_DISTANCE) {
            continue;
        }
        LocalPoint localBookcase = LocalPoint.fromWorld(client, caseLoc);
        if (localBookcase == null) {
            continue;
        }
        Point screenBookcase = Perspective.worldToCanvas(client, localBookcase.getX(), localBookcase.getY(), caseLoc.getPlane(), 25);
        if (screenBookcase != null) {
            boolean bookIsKnown = bookcase.isBookSet();
            Book book = bookcase.getBook();
            Set<Book> possible = bookcase.getPossibleBooks();
            if (bookIsKnown && book == null) {
                for (Book b : possible) {
                    if (b != null && b.isDarkManuscript()) {
                        book = b;
                        break;
                    }
                }
            }
            if (!bookIsKnown && possible.size() == 1) {
                book = possible.iterator().next();
                bookIsKnown = true;
            }
            Color color = bookIsKnown ? Color.ORANGE : Color.WHITE;
            // Render the poly on the floor
            if (!(bookIsKnown && book == null) && (library.getState() == SolvedState.NO_DATA || book != null || possible.size() > 0)) {
                Polygon poly = getCanvasTilePoly(client, localBookcase);
                if (poly != null) {
                    OverlayUtil.renderPolygon(g, poly, color);
                }
            }
            int height = 0;
            // If the book is singled out, render the text and the book's icon
            if (bookIsKnown) {
                if (book != null) {
                    FontMetrics fm = g.getFontMetrics();
                    Rectangle2D bounds = fm.getStringBounds(book.getShortName(), g);
                    height = (int) bounds.getHeight() + book.getIcon().getHeight() + 6;
                    Point textLoc = new Point((int) (screenBookcase.getX() - (bounds.getWidth() / 2)), screenBookcase.getY() - (height / 2) + (int) bounds.getHeight());
                    OverlayUtil.renderTextLocation(g, textLoc, book.getShortName(), color);
                    g.drawImage(book.getIcon(), screenBookcase.getX() - (book.getIcon().getWidth() / 2), screenBookcase.getY() + (height / 2) - book.getIcon().getHeight(), null);
                }
            } else {
                // otherwise render up to 9 icons of the possible books in the bookcase in a square
                final int BOOK_ICON_SIZE = 32;
                Book[] books = possible.stream().filter(Objects::nonNull).limit(9).toArray(Book[]::new);
                if (books.length > 1 && books.length <= 9) {
                    int cols = (int) Math.ceil(Math.sqrt(books.length));
                    int rows = (int) Math.ceil((double) books.length / cols);
                    height = rows * BOOK_ICON_SIZE;
                    int xbase = screenBookcase.getX() - ((cols * BOOK_ICON_SIZE) / 2);
                    int ybase = screenBookcase.getY() - rows * BOOK_ICON_SIZE / 2;
                    for (int i = 0; i < books.length; i++) {
                        int col = i % cols;
                        int row = i / cols;
                        int x = col * BOOK_ICON_SIZE;
                        int y = row * BOOK_ICON_SIZE;
                        if (row == rows - 1) {
                            x += (BOOK_ICON_SIZE * (books.length % rows)) / 2;
                        }
                        g.drawImage(books[i].getIcon(), xbase + x, ybase + y, null);
                    }
                }
            }
            // Draw the bookcase's ID on top
            if (KourendLibraryPlugin.debug) {
                FontMetrics fm = g.getFontMetrics();
                String str = bookcase.getIndex().stream().map(Object::toString).collect(Collectors.joining(", "));
                Rectangle2D bounds = fm.getStringBounds(str, g);
                Point textLoc = new Point((int) (screenBookcase.getX() - (bounds.getWidth() / 2)), screenBookcase.getY() - (height / 2));
                OverlayUtil.renderTextLocation(g, textLoc, str, Color.WHITE);
            }
        }
    }
    // Render the customer's wanted book on their head and a poly under their feet
    LibraryCustomer customer = library.getCustomer();
    if (customer != null) {
        client.getNpcs().stream().filter(n -> n.getId() == customer.getId()).forEach(n -> {
            Book b = library.getCustomerBook();
            LocalPoint local = n.getLocalLocation();
            Polygon poly = getCanvasTilePoly(client, local);
            OverlayUtil.renderPolygon(g, poly, Color.WHITE);
            Point screen = Perspective.worldToCanvas(client, local.getX(), local.getY(), client.getPlane(), n.getLogicalHeight());
            if (screen != null) {
                g.drawImage(b.getIcon(), screen.getX() - (b.getIcon().getWidth() / 2), screen.getY() - b.getIcon().getHeight(), null);
            }
        });
    }
    return null;
}
Also used : Color(java.awt.Color) Polygon(java.awt.Polygon) LocalPoint(net.runelite.api.coords.LocalPoint) WorldPoint(net.runelite.api.coords.WorldPoint) OverlayLayer(net.runelite.client.ui.overlay.OverlayLayer) OverlayUtil(net.runelite.client.ui.overlay.OverlayUtil) Inject(com.google.inject.Inject) Rectangle2D(java.awt.geom.Rectangle2D) Set(java.util.Set) Player(net.runelite.api.Player) Point(net.runelite.api.Point) Client(net.runelite.api.Client) Collectors(java.util.stream.Collectors) Objects(java.util.Objects) Dimension(java.awt.Dimension) List(java.util.List) Perspective(net.runelite.api.Perspective) FontMetrics(java.awt.FontMetrics) Graphics2D(java.awt.Graphics2D) Overlay(net.runelite.client.ui.overlay.Overlay) OverlayPosition(net.runelite.client.ui.overlay.OverlayPosition) Perspective.getCanvasTilePoly(net.runelite.api.Perspective.getCanvasTilePoly) Player(net.runelite.api.Player) Color(java.awt.Color) Rectangle2D(java.awt.geom.Rectangle2D) LocalPoint(net.runelite.api.coords.LocalPoint) WorldPoint(net.runelite.api.coords.WorldPoint) Point(net.runelite.api.Point) LocalPoint(net.runelite.api.coords.LocalPoint) WorldPoint(net.runelite.api.coords.WorldPoint) Point(net.runelite.api.Point) LocalPoint(net.runelite.api.coords.LocalPoint) WorldPoint(net.runelite.api.coords.WorldPoint) FontMetrics(java.awt.FontMetrics) Objects(java.util.Objects) Polygon(java.awt.Polygon)

Example 23 with Client

use of net.runelite.api.Client in project runelite by runelite.

the class SuperRestore method calculate.

@Override
public StatsChanges calculate(Client client) {
    StatsChanges changes = new StatsChanges(0);
    SimpleStatBoost calc = new SimpleStatBoost(null, false, perc(.25, delta));
    PrayerPotion prayer = new PrayerPotion(delta);
    changes.setStatChanges(Stream.concat(Stream.of(prayer.effect(client)), Stream.of(superRestoreStats).filter(stat -> stat.getValue(client) < stat.getMaximum(client)).map(stat -> {
        calc.setStat(stat);
        return calc.effect(client);
    })).toArray(StatChange[]::new));
    changes.setPositivity(Stream.of(changes.getStatChanges()).map(sc -> sc.getPositivity()).max(Comparator.comparing(Enum::ordinal)).get());
    return changes;
}
Also used : StatsChanges(net.runelite.client.plugins.itemstats.StatsChanges) Builders.perc(net.runelite.client.plugins.itemstats.Builders.perc) Stream(java.util.stream.Stream) Stat(net.runelite.client.plugins.itemstats.stats.Stat) Stats(net.runelite.client.plugins.itemstats.stats.Stats) RequiredArgsConstructor(lombok.RequiredArgsConstructor) Effect(net.runelite.client.plugins.itemstats.Effect) StatChange(net.runelite.client.plugins.itemstats.StatChange) Comparator(java.util.Comparator) Client(net.runelite.api.Client) SimpleStatBoost(net.runelite.client.plugins.itemstats.SimpleStatBoost) SimpleStatBoost(net.runelite.client.plugins.itemstats.SimpleStatBoost) StatChange(net.runelite.client.plugins.itemstats.StatChange) StatsChanges(net.runelite.client.plugins.itemstats.StatsChanges)

Aggregations

Client (net.runelite.api.Client)23 Dimension (java.awt.Dimension)6 Rectangle (java.awt.Rectangle)6 Point (java.awt.Point)5 Color (java.awt.Color)3 Subscribe (com.google.common.eventbus.Subscribe)2 Graphics2D (java.awt.Graphics2D)2 BufferedImage (java.awt.image.BufferedImage)2 List (java.util.List)2 Objects (java.util.Objects)2 Collectors (java.util.stream.Collectors)2 Stream (java.util.stream.Stream)2 MenuEntry (net.runelite.api.MenuEntry)2 NPC (net.runelite.api.NPC)2 NPCComposition (net.runelite.api.NPCComposition)2 InfoBoxOverlay (net.runelite.client.ui.overlay.infobox.InfoBoxOverlay)2 TooltipOverlay (net.runelite.client.ui.overlay.tooltip.TooltipOverlay)2 MoreObjects (com.google.common.base.MoreObjects)1 Inject (com.google.inject.Inject)1 Applet (java.applet.Applet)1