Search in sources :

Example 1 with Pair

use of no.stelar7.api.l4j8.basic.utils.Pair in project L4J8 by stelar7.

the class MatchHistoryCrawler method getAllMasterypages.

private Map<Integer, List<Pair<Integer, Integer>>> getAllMasterypages() throws SQLException {
    try (ResultSet mlist = mmSelectStatement.executeQuery()) {
        Map<Integer, List<Pair<Integer, Integer>>> localMasteries = new HashMap<>();
        while (mlist.next()) {
            int key = mlist.getInt("page");
            List<Pair<Integer, Integer>> mdata = localMasteries.getOrDefault(key, new ArrayList<>());
            mdata.add(new Pair(mlist.getInt("masteryid"), mlist.getInt("rank")));
            localMasteries.put(key, mdata);
        }
        return localMasteries;
    }
}
Also used : Pair(no.stelar7.api.l4j8.basic.utils.Pair)

Example 2 with Pair

use of no.stelar7.api.l4j8.basic.utils.Pair in project L4J8 by stelar7.

the class MatchHistoryCrawler method getGamesFromDatabase.

private List<Pair<Long, Platform>> getGamesFromDatabase(Long accountid, Platform platformid) throws SQLException {
    List<Pair<Long, Platform>> data = new ArrayList<>();
    matchCheck.setLong(1, accountid);
    matchCheck.setString(2, platformid.name());
    try (ResultSet rs = matchCheck.executeQuery()) {
        while (rs.next()) {
            data.add(new Pair(rs.getLong("gameid"), Platform.getFromCode(rs.getString("platformid")).get()));
        }
        return data;
    }
}
Also used : Pair(no.stelar7.api.l4j8.basic.utils.Pair)

Example 3 with Pair

use of no.stelar7.api.l4j8.basic.utils.Pair in project L4J8 by stelar7.

the class FrameToImageTest method generateMinimap.

private void generateMinimap(Match match) {
    // Load map data
    try {
        BufferedImage image = ImageIO.read(new URL(api.getImageAPI().getMap("map" + match.getMap().getId(), null, null)));
        Rectangle mapBounds = match.getMap().getBounds();
        // load icon data
        int championSquareOffset = (int) (120d / 4d);
        int championSquarePadding = (int) (120d / 12d);
        Map<Integer, Item> items = api.getStaticAPI().getItems(Platform.EUW1, null, null, null).getData();
        Map<Integer, StaticChampion> champs = api.getStaticAPI().getChampions(Platform.EUW1, null, null, null);
        Map<Integer, BufferedImage> championImages = new HashMap<>();
        Map<Integer, BufferedImage> itemImages = new HashMap<>();
        match.getParticipants().forEach(p -> {
            try {
                BufferedImage before = ImageIO.read(new URL(api.getImageAPI().getSquare(champs.get(p.getChampionId()), null, null)));
                double scaleFactor = 1d / 4d;
                BufferedImage after = scaleImage(before, scaleFactor);
                championImages.put(p.getParticipantId(), after);
            } catch (IOException e) {
                e.printStackTrace();
            }
        });
        items.values().parallelStream().forEach(i -> {
            try {
                BufferedImage before = ImageIO.read(new URL(api.getImageAPI().getItem(i, null, null)));
                double scaleFactor = 1d / 2d;
                BufferedImage after = scaleImage(before, scaleFactor);
                itemImages.put(i.getId(), after);
            } catch (IOException e) {
                e.printStackTrace();
            }
        });
        if (turretIcon == null) {
            try {
                turretIcon = new EnumMap<>(TeamType.class);
                BufferedImage temp = ImageIO.read(new URL("http://matchhistory.na.leagueoflegends.com/assets/1.0.32/images/normal/event_icons/turret_100.png"));
                turretIcon.put(TeamType.BLUE, scaleImage(temp, .4));
                temp = ImageIO.read(new URL("http://matchhistory.na.leagueoflegends.com/assets/1.0.32/images/normal/event_icons/turret_200.png"));
                turretIcon.put(TeamType.RED, scaleImage(temp, .4));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (inhibIcon == null) {
            try {
                inhibIcon = new EnumMap<>(TeamType.class);
                BufferedImage temp = ImageIO.read(new URL("http://matchhistory.na.leagueoflegends.com/assets/1.0.32/images/normal/event_icons/inhibitor_building_100.png"));
                inhibIcon.put(TeamType.BLUE, scaleImage(temp, .25));
                temp = ImageIO.read(new URL("http://matchhistory.na.leagueoflegends.com/assets/1.0.32/images/normal/event_icons/inhibitor_building_200.png"));
                inhibIcon.put(TeamType.RED, scaleImage(temp, .25));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (swordIcon == null) {
            try {
                swordIcon = ImageIO.read(new URL("http://matchhistory.na.leagueoflegends.com/assets/1.0.32/css/resources/images/scoreboardicon_score.png"));
                swordIcon = scaleImage(swordIcon, 1.5);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        Map<Integer, List<Pair<Item, Integer>>> inventory = new HashMap<>();
        Map<Integer, Triplet<Integer>> kda = new HashMap<>();
        IntStream.rangeClosed(1, 10).forEach(i -> kda.put(i, new Triplet<>(0, 0, 0)));
        match.getTimeline().getFrames().forEach(frame -> {
            try {
                // Generate file output data
                String path = match.getPlatform().getValue() + File.separator + match.getMatchId();
                File outputFile = new File(path, frame.getTimestamp() + ".png");
                outputFile.getParentFile().mkdirs();
                // Make sure map is large enough for all the data
                int imgW = image.getWidth() + (championSquareOffset + championSquarePadding) * 4;
                int imgH = (image.getHeight() + (championSquareOffset + championSquarePadding) * 11);
                BufferedImage newMap = new BufferedImage(imgW, imgH, BufferedImage.TYPE_INT_ARGB);
                Graphics2D g = (Graphics2D) newMap.getGraphics();
                // set background
                g.setColor(Color.black);
                g.fillRect(0, 0, newMap.getWidth(), newMap.getHeight());
                // set separator line
                g.setColor(Color.white);
                g.fillRect(0, image.getHeight() + (int) (championSquareOffset / 1.5f) + championSquarePadding / 2, newMap.getWidth(), championSquareOffset / 4);
                g.fillRect(image.getWidth() + (int) (championSquareOffset / 1.5f), 0, championSquareOffset / 4, newMap.getHeight());
                // set minimap
                g.drawImage(image, 0, 0, null);
                int[] killCount = { 0 };
                frame.getEvents().forEach(me -> {
                    Predicate<Pair<Item, Integer>> itemIdFilter = p -> p.getKey().getId() == me.getItemId();
                    Predicate<Pair<Item, Integer>> itemAfterFilter = p -> p.getKey().getId() == me.getItemAfter();
                    Predicate<Pair<Item, Integer>> itemBeforeFilter = p -> p.getKey().getId() == me.getItemBefore();
                    if (!inhibDestroyTime.isEmpty()) {
                        Map<Pair<Integer, Integer>, Long> clone = new HashMap<>(inhibDestroyTime);
                        clone.forEach((k, v) -> {
                            if (v + (60000 * 5) <= me.getTimestamp()) {
                                inhib.add(k);
                                inhibDestroyTime.remove(k);
                            }
                        });
                    }
                    switch(me.getEventType()) {
                        case ITEM_PURCHASED:
                            {
                                handlePurchaseEvent(items, inventory, me, itemIdFilter);
                                break;
                            }
                        case ITEM_DESTROYED:
                        case ITEM_SOLD:
                            {
                                handleSoldEvent(inventory, me, itemIdFilter);
                                break;
                            }
                        case ITEM_UNDO:
                            {
                                handleUndoEvent(items, inventory, me, itemBeforeFilter, itemAfterFilter);
                                break;
                            }
                        case CHAMPION_KILL:
                            {
                                handleKillEvent(image, mapBounds, championSquareOffset, championSquarePadding, championImages, g, killCount, me, kda);
                                break;
                            }
                        // ignored events
                        case SKILL_LEVEL_UP:
                        case WARD_KILL:
                        case WARD_PLACED:
                        case ELITE_MONSTER_KILL:
                            {
                                break;
                            }
                        case BUILDING_KILL:
                            {
                                handleBuildingEvent(me);
                                break;
                            }
                        default:
                            {
                                System.out.println(me);
                                break;
                            }
                    }
                });
                turrets.forEach(p -> {
                    BufferedImage turretImage = turretIcon.get(turretTeam.get(p));
                    int xPos = scale(p.getKey(), (int) mapBounds.getX(), (int) mapBounds.getWidth(), 0, image.getWidth());
                    int yPos = image.getHeight() - scale(p.getValue(), (int) mapBounds.getY(), (int) mapBounds.getHeight(), 0, image.getHeight());
                    int xOffset = (int) (-turretImage.getWidth() / 1.25f);
                    int yOffset = -(turretImage.getHeight() / 2);
                    xPos += xOffset;
                    yPos += yOffset;
                    g.drawImage(turretImage, xPos, yPos, null);
                });
                inhib.forEach(p -> {
                    BufferedImage inhibImage = inhibIcon.get(inhibTeam.get(p));
                    int xPos = scale(p.getKey(), (int) mapBounds.getX(), (int) mapBounds.getWidth(), 0, image.getWidth());
                    int yPos = image.getHeight() - scale(p.getValue(), (int) mapBounds.getY(), (int) mapBounds.getHeight(), 0, image.getHeight());
                    int xOffset = (int) (-inhibImage.getWidth() / 1.1f);
                    int yOffset = -(inhibImage.getHeight() / 3);
                    xPos += xOffset;
                    yPos += yOffset;
                    g.drawImage(inhibImage, xPos, yPos, null);
                });
                frame.getParticipantFrames().values().forEach(mpf -> {
                    drawPosition(image, mapBounds, g, mpf, championImages);
                    drawInventory(image, championSquareOffset, championSquarePadding, itemImages, inventory, g, mpf, championImages);
                    drawKDA(kda, image, g, championSquareOffset, championSquarePadding);
                });
                for (int i = 0; i < killList.size(); i++) {
                    Pair<Integer, Integer> k = killList.get(i);
                    int xPos = k.getKey();
                    int yPos = k.getValue();
                    g.setColor(Color.red);
                    g.fillOval(xPos - 8, yPos - 8, 16, 16);
                    g.setColor(Color.black);
                    g.drawString(String.valueOf(i + 1), xPos - 3, yPos + 5);
                    g.drawOval(xPos - 8, yPos - 8, 16, 16);
                }
                killList.clear();
                ImageIO.write(newMap, "png", outputFile);
            } catch (IOException e) {
                e.printStackTrace();
            }
        });
    } catch (IOException e) {
        e.printStackTrace();
    }
}
Also used : IntStream(java.util.stream.IntStream) Platform(no.stelar7.api.l4j8.basic.constants.api.Platform) no.stelar7.api.l4j8.basic.utils(no.stelar7.api.l4j8.basic.utils) java.awt.image(java.awt.image) java.util(java.util) Item(no.stelar7.api.l4j8.pojo.staticdata.item.Item) no.stelar7.api.l4j8.basic.constants.types(no.stelar7.api.l4j8.basic.constants.types) URL(java.net.URL) Predicate(java.util.function.Predicate) no.stelar7.api.l4j8.pojo.match(no.stelar7.api.l4j8.pojo.match) SummonerBuilder(no.stelar7.api.l4j8.impl.builders.summoner.SummonerBuilder) AffineTransform(java.awt.geom.AffineTransform) L4J8(no.stelar7.api.l4j8.impl.L4J8) FileSystemCacheProvider(no.stelar7.api.l4j8.basic.cache.impl.FileSystemCacheProvider) java.awt(java.awt) List(java.util.List) Summoner(no.stelar7.api.l4j8.pojo.summoner.Summoner) java.io(java.io) MatchListBuilder(no.stelar7.api.l4j8.impl.builders.match.MatchListBuilder) SecretFile(no.stelar7.api.l4j8.tests.SecretFile) ImageIO(javax.imageio.ImageIO) org.junit(org.junit) StaticChampion(no.stelar7.api.l4j8.pojo.staticdata.champion.StaticChampion) DataCall(no.stelar7.api.l4j8.basic.calling.DataCall) URL(java.net.URL) Item(no.stelar7.api.l4j8.pojo.staticdata.item.Item) List(java.util.List) StaticChampion(no.stelar7.api.l4j8.pojo.staticdata.champion.StaticChampion) SecretFile(no.stelar7.api.l4j8.tests.SecretFile)

Example 4 with Pair

use of no.stelar7.api.l4j8.basic.utils.Pair in project L4J8 by stelar7.

the class FrameToImageTest method handleUndoEvent.

private void handleUndoEvent(Map<Integer, Item> items, Map<Integer, List<Pair<Item, Integer>>> inventory, MatchEvent me, Predicate<Pair<Item, Integer>> itemBeforeFilter, Predicate<Pair<Item, Integer>> afterItemFilter) {
    List<Pair<Item, Integer>> inv = inventory.getOrDefault(me.getParticipantId(), new ArrayList<>());
    Optional<Pair<Item, Integer>> optional = inv.stream().filter(itemBeforeFilter).findFirst();
    if (optional.isPresent()) {
        Pair<Item, Integer> op = optional.get();
        Pair<Item, Integer> np = new Pair<>(op.getKey(), op.getValue() - 1);
        inv.remove(op);
        if (np.getValue() > 0) {
            inv.add(np);
        }
        Item parent = items.get(op.getKey().getId());
        if (parent.getFrom() != null) {
            for (String s : items.get(op.getKey().getId()).getFrom()) {
                int iid = Integer.parseInt(s);
                Optional<Pair<Item, Integer>> innerO = inv.stream().filter(p -> p.getKey().getId() == iid).findFirst();
                if (innerO.isPresent()) {
                    Pair<Item, Integer> iop = innerO.get();
                    Pair<Item, Integer> inp = new Pair<>(iop.getKey(), iop.getValue() + 1);
                    inv.remove(iop);
                    inv.add(inp);
                } else {
                    Pair<Item, Integer> inp = new Pair<>(items.get(iid), 1);
                    inv.add(inp);
                }
            }
        }
    } else {
        Optional<Pair<Item, Integer>> iopiotnal = inv.stream().filter(afterItemFilter).findFirst();
        if (iopiotnal.isPresent()) {
            Pair<Item, Integer> op = iopiotnal.get();
            Pair<Item, Integer> np = new Pair<>(op.getKey(), op.getValue() + 1);
            inv.remove(op);
            inv.add(np);
        } else {
            Pair<Item, Integer> np = new Pair<>(items.get(me.getItemAfter()), 1);
            inv.add(np);
        }
    }
    inventory.put(me.getParticipantId(), inv);
}
Also used : IntStream(java.util.stream.IntStream) Platform(no.stelar7.api.l4j8.basic.constants.api.Platform) no.stelar7.api.l4j8.basic.utils(no.stelar7.api.l4j8.basic.utils) java.awt.image(java.awt.image) java.util(java.util) Item(no.stelar7.api.l4j8.pojo.staticdata.item.Item) no.stelar7.api.l4j8.basic.constants.types(no.stelar7.api.l4j8.basic.constants.types) URL(java.net.URL) Predicate(java.util.function.Predicate) no.stelar7.api.l4j8.pojo.match(no.stelar7.api.l4j8.pojo.match) SummonerBuilder(no.stelar7.api.l4j8.impl.builders.summoner.SummonerBuilder) AffineTransform(java.awt.geom.AffineTransform) L4J8(no.stelar7.api.l4j8.impl.L4J8) FileSystemCacheProvider(no.stelar7.api.l4j8.basic.cache.impl.FileSystemCacheProvider) java.awt(java.awt) List(java.util.List) Summoner(no.stelar7.api.l4j8.pojo.summoner.Summoner) java.io(java.io) MatchListBuilder(no.stelar7.api.l4j8.impl.builders.match.MatchListBuilder) SecretFile(no.stelar7.api.l4j8.tests.SecretFile) ImageIO(javax.imageio.ImageIO) org.junit(org.junit) StaticChampion(no.stelar7.api.l4j8.pojo.staticdata.champion.StaticChampion) DataCall(no.stelar7.api.l4j8.basic.calling.DataCall) Item(no.stelar7.api.l4j8.pojo.staticdata.item.Item)

Example 5 with Pair

use of no.stelar7.api.l4j8.basic.utils.Pair in project L4J8 by stelar7.

the class MasteryAPI method getChampionMastery.

/**
 * The response object contains the summoners mastery of a champion.
 * Only championid and summonerid is present if the level == 0
 *
 * @param server     the region to execute against
 * @param summonerId the summonerId
 * @param championId the championId
 * @return Optional ChampionMastery
 */
public ChampionMastery getChampionMastery(Platform server, long summonerId, int championId) {
    DataCallBuilder builder = new DataCallBuilder().withURLParameter(Constants.SUMMONER_ID_PLACEHOLDER, String.valueOf(summonerId)).withURLParameter(Constants.CHAMPION_ID_PLACEHOLDER, String.valueOf(championId)).withEndpoint(URLEndpoint.V3_MASTERY_BY_CHAMPION).withPlatform(server);
    Optional chl = DataCall.getCacheProvider().get(URLEndpoint.V3_MASTERY_BY_CHAMPION, server, summonerId, championId);
    if (chl.isPresent()) {
        return (ChampionMastery) chl.get();
    }
    Object masteryObj = builder.build();
    if (masteryObj instanceof Pair) {
        try {
            ChampionMastery mastery = new ChampionMastery();
            Field player = mastery.getClass().getDeclaredField("playerId");
            player.setAccessible(true);
            player.set(mastery, summonerId);
            Field champ = mastery.getClass().getDeclaredField("championId");
            champ.setAccessible(true);
            champ.set(mastery, championId);
            Field level = mastery.getClass().getDeclaredField("championLevel");
            level.setAccessible(true);
            level.set(mastery, 0);
            DataCall.getCacheProvider().store(URLEndpoint.V3_MASTERY_BY_CHAMPION, mastery, server, summonerId, championId);
        } catch (NoSuchFieldException | IllegalAccessException e) {
            Logger.getGlobal().warning("Class has changed, please fix me");
        }
    }
    DataCall.getCacheProvider().store(URLEndpoint.V3_MASTERY_BY_CHAMPION, masteryObj, server, summonerId, championId);
    return (ChampionMastery) masteryObj;
}
Also used : Field(java.lang.reflect.Field) ChampionMastery(no.stelar7.api.l4j8.pojo.championmastery.ChampionMastery) Pair(no.stelar7.api.l4j8.basic.utils.Pair)

Aggregations

Pair (no.stelar7.api.l4j8.basic.utils.Pair)6 Summoner (no.stelar7.api.l4j8.pojo.summoner.Summoner)3 java.awt (java.awt)2 AffineTransform (java.awt.geom.AffineTransform)2 java.awt.image (java.awt.image)2 java.io (java.io)2 Field (java.lang.reflect.Field)2 URL (java.net.URL)2 java.util (java.util)2 List (java.util.List)2 Optional (java.util.Optional)2 Predicate (java.util.function.Predicate)2 IntStream (java.util.stream.IntStream)2 ImageIO (javax.imageio.ImageIO)2 FileSystemCacheProvider (no.stelar7.api.l4j8.basic.cache.impl.FileSystemCacheProvider)2 DataCall (no.stelar7.api.l4j8.basic.calling.DataCall)2 Platform (no.stelar7.api.l4j8.basic.constants.api.Platform)2 no.stelar7.api.l4j8.basic.constants.types (no.stelar7.api.l4j8.basic.constants.types)2 no.stelar7.api.l4j8.basic.utils (no.stelar7.api.l4j8.basic.utils)2 L4J8 (no.stelar7.api.l4j8.impl.L4J8)2