Search in sources :

Example 1 with Review

use of com.alpsbte.plotsystem.core.system.Review in project Plot-System by AlpsBTE.

the class ReviewPlotMenu method setItemClickEventsAsync.

@Override
protected void setItemClickEventsAsync() {
    // Set click event for close item
    getMenu().getSlot(50).setClickHandler((clickPlayer, clickInformation) -> clickPlayer.closeInventory());
    // Set click event for plot info item
    getMenu().getSlot(4).setClickHandler((clickPlayer, clickInformation) -> {
        clickPlayer.closeInventory();
        try {
            new PlotActionsMenu(clickPlayer, plot);
        } catch (SQLException ex) {
            Bukkit.getLogger().log(Level.SEVERE, "A SQL error occurred!", ex);
        }
    });
    // Set click event for submit item
    getMenu().getSlot(48).setClickHandler((clickPlayer, clickInformation) -> {
        CompletableFuture.runAsync(() -> {
            try {
                StringBuilder score = new StringBuilder();
                int totalRating = 0;
                boolean isRejected = false;
                for (int i = 0; i < 4; i++) {
                    for (int j = 0; j < 6; j++) {
                        if (getMenu().getSlot(11 + (i * 9) + j).getItem(clickPlayer).getItemMeta().hasEnchant(Enchantment.ARROW_DAMAGE)) {
                            if (i == 3) {
                                score.append(j);
                            } else {
                                score.append(j).append(",");
                            }
                            totalRating += j;
                            if (j <= 0) {
                                isRejected = true;
                            }
                        }
                    }
                }
                if (totalRating <= 8)
                    isRejected = true;
                if (totalRating == 0 && !sentWarning) {
                    clickPlayer.sendMessage(Utils.getInfoMessageFormat(LangUtil.get(getMenuPlayer(), LangPaths.Message.Info.PLOT_WILL_GET_ABANDONED)));
                    clickPlayer.playSound(clickPlayer.getLocation(), Utils.CreatePlotSound, 1, 1);
                    sentWarning = true;
                    return;
                } else if (isRejected && !sentWarning) {
                    clickPlayer.sendMessage(Utils.getInfoMessageFormat(LangUtil.get(getMenuPlayer(), LangPaths.Message.Info.PLOT_WILL_GET_REJECTED)));
                    clickPlayer.playSound(clickPlayer.getLocation(), Utils.CreatePlotSound, 1, 1);
                    sentWarning = true;
                    return;
                } else if (totalRating == 0) {
                    plot.setStatus(Status.unfinished);
                    Bukkit.getScheduler().runTask(PlotSystem.getPlugin(), () -> clickPlayer.performCommand("plot abandon " + plot.getID()));
                    return;
                }
                if (plot.isReviewed()) {
                    plot.getReview().setRating(score.toString());
                    plot.getReview().setReviewer(clickPlayer.getUniqueId());
                } else {
                    new Review(plot.getID(), clickPlayer.getUniqueId(), score.toString());
                }
                double totalRatingWithMultiplier = totalRating * PlotManager.getMultiplierByDifficulty(plot.getDifficulty());
                totalRating = (int) Math.floor(totalRatingWithMultiplier);
                plot.setTotalScore(totalRating);
                String reviewerConfirmationMessage;
                clickPlayer.closeInventory();
                if (!isRejected) {
                    clickPlayer.sendMessage(Utils.getInfoMessageFormat(LangUtil.get(getMenuPlayer(), LangPaths.Message.Info.SAVING_PLOT)));
                    try {
                        if (!PlotManager.savePlotAsSchematic(plot)) {
                            clickPlayer.sendMessage(Utils.getErrorMessageFormat(LangUtil.get(getMenuPlayer(), LangPaths.Message.Error.ERROR_OCCURRED)));
                            Bukkit.getLogger().log(Level.WARNING, "Could not save finished plot schematic (ID: " + plot.getID() + ")!");
                            return;
                        }
                    } catch (IOException | SQLException | WorldEditException ex) {
                        Bukkit.getLogger().log(Level.WARNING, "Could not save finished plot schematic (ID: " + plot.getID() + ")!", ex);
                    }
                    plot.setStatus(Status.completed);
                    plot.getReview().setFeedbackSent(false);
                    plot.getReview().setFeedback("No Feedback");
                    plot.getPlotOwner().addCompletedBuild(1);
                    // Remove Plot from Owner
                    plot.getPlotOwner().removePlot(plot.getSlot());
                    if (plot.getPlotMembers().isEmpty()) {
                        // Plot was made alone
                        reviewerConfirmationMessage = Utils.getInfoMessageFormat(LangUtil.get(getMenuPlayer(), LangPaths.Message.Info.PLOT_MARKED_REVIEWED, Integer.toString(plot.getID()), plot.getPlotOwner().getName()));
                        // Builder gets 100% of score
                        plot.getPlotOwner().addScore(totalRating);
                    } else {
                        // Plot was made in a group
                        StringBuilder sb = new StringBuilder();
                        for (int i = 0; i < plot.getPlotMembers().size(); i++) {
                            sb.append(i == plot.getPlotMembers().size() - 1 ? plot.getPlotMembers().get(i).getName() : plot.getPlotMembers().get(i).getName() + ", ");
                        }
                        reviewerConfirmationMessage = Utils.getInfoMessageFormat(LangUtil.get(getMenuPlayer(), LangPaths.Message.Info.PLOT_MARKED_REVIEWED, Integer.toString(plot.getID()), sb.toString()));
                        // Score gets split between all participants
                        plot.getPlotOwner().addScore(plot.getSharedScore());
                        for (Builder builder : plot.getPlotMembers()) {
                            // Score gets split between all participants
                            builder.addScore(plot.getSharedScore());
                            builder.addCompletedBuild(1);
                            // Remove Slot from Member
                            builder.removePlot(builder.getSlot(plot));
                        }
                    }
                } else {
                    if (plot.getPlotMembers().size() != 0) {
                        // Plot was made alone
                        reviewerConfirmationMessage = Utils.getInfoMessageFormat(LangUtil.get(getMenuPlayer(), LangPaths.Message.Info.PLOT_REJECTED, Integer.toString(plot.getID()), plot.getPlotOwner().getName()));
                    } else {
                        // Plot was made in a group
                        StringBuilder sb = new StringBuilder();
                        for (int i = 0; i < plot.getPlotMembers().size(); i++) {
                            sb.append(i == plot.getPlotMembers().size() - 1 ? plot.getPlotMembers().get(i).getName() : plot.getPlotMembers().get(i).getName() + ", ");
                        }
                        reviewerConfirmationMessage = Utils.getInfoMessageFormat(LangUtil.get(getMenuPlayer(), LangPaths.Message.Info.PLOT_REJECTED, Integer.toString(plot.getID()), sb.toString()));
                    }
                    PlotHandler.undoSubmit(plot);
                }
                boolean finalIsRejected = isRejected;
                Bukkit.getScheduler().runTask(PlotSystem.getPlugin(), () -> {
                    for (Player player : plot.getWorld().getBukkitWorld().getPlayers()) {
                        player.teleport(Utils.getSpawnLocation());
                    }
                    // Delete plot world after reviewing
                    if (!finalIsRejected)
                        plot.getWorld().deleteWorld();
                    clickPlayer.sendMessage(reviewerConfirmationMessage);
                    clickPlayer.playSound(clickPlayer.getLocation(), Utils.FinishPlotSound, 1f, 1f);
                });
                for (Builder member : plot.getPlotMembers()) {
                    if (member.isOnline()) {
                        PlotHandler.sendFeedbackMessage(Collections.singletonList(plot), member.getPlayer());
                    }
                }
                if (plot.getPlotOwner().isOnline()) {
                    PlotHandler.sendFeedbackMessage(Collections.singletonList(plot), plot.getPlotOwner().getPlayer());
                    plot.getReview().setFeedbackSent(true);
                }
            } catch (SQLException ex) {
                Bukkit.getLogger().log(Level.SEVERE, "A SQL error occurred!", ex);
            }
        });
    });
    // Set click event for point selection items
    for (int i = 0; i < 54; i++) {
        int slot = i;
        int column = (slot % 9) + 1;
        int row = (slot - (slot % 9)) / 9 + 1;
        ItemMeta meta = getMenu().getSlot(slot).getItem(getMenuPlayer()).getItemMeta();
        if (column > 2 && column < 9 && row > 1 && row < 6) {
            // Go through the whole points row
            getMenu().getSlot(i).setClickHandler((clickPlayer, clickInformation) -> {
                for (int j = 0; j < 6; j++) {
                    if (getMenu().getSlot(slot - (column - 1) + j + 2).getItem(clickPlayer).getItemMeta().hasEnchant(Enchantment.ARROW_DAMAGE)) {
                        ItemStack itemPrevious = getMenu().getSlot(slot - (column - 1) + j + 2).getItem(clickPlayer);
                        ItemMeta metaPrevious = itemPrevious.getItemMeta();
                        metaPrevious.removeEnchant(Enchantment.ARROW_DAMAGE);
                        itemPrevious.setItemMeta(metaPrevious);
                        getMenu().getSlot(slot - (column - 1) + j + 2).setItem(itemPrevious);
                    }
                }
                meta.addEnchant(Enchantment.ARROW_DAMAGE, 1, true);
                ItemStack newItem = getMenu().getSlot(slot).getItem(clickPlayer);
                newItem.setItemMeta(meta);
                getMenu().getSlot(slot).setItem(newItem);
                sentWarning = false;
            });
        }
    }
}
Also used : Player(org.bukkit.entity.Player) SQLException(java.sql.SQLException) LoreBuilder(com.alpsbte.plotsystem.utils.items.builder.LoreBuilder) Builder(com.alpsbte.plotsystem.core.system.Builder) ItemBuilder(com.alpsbte.plotsystem.utils.items.builder.ItemBuilder) Review(com.alpsbte.plotsystem.core.system.Review) IOException(java.io.IOException) WorldEditException(com.sk89q.worldedit.WorldEditException) ItemStack(org.bukkit.inventory.ItemStack) ItemMeta(org.bukkit.inventory.meta.ItemMeta)

Example 2 with Review

use of com.alpsbte.plotsystem.core.system.Review in project Plot-System by AlpsBTE.

the class Plot method getReview.

@Override
public Review getReview() throws SQLException {
    if (getStatus() == Status.completed || isRejected()) {
        try (ResultSet rs = DatabaseConnection.createStatement("SELECT review_id FROM plotsystem_plots WHERE id = ?").setValue(this.ID).executeQuery()) {
            if (rs.next()) {
                int i = rs.getInt(1);
                DatabaseConnection.closeResultSet(rs);
                return new Review(i);
            }
            DatabaseConnection.closeResultSet(rs);
        }
    }
    return null;
}
Also used : ResultSet(java.sql.ResultSet) Review(com.alpsbte.plotsystem.core.system.Review)

Aggregations

Review (com.alpsbte.plotsystem.core.system.Review)2 Builder (com.alpsbte.plotsystem.core.system.Builder)1 ItemBuilder (com.alpsbte.plotsystem.utils.items.builder.ItemBuilder)1 LoreBuilder (com.alpsbte.plotsystem.utils.items.builder.LoreBuilder)1 WorldEditException (com.sk89q.worldedit.WorldEditException)1 IOException (java.io.IOException)1 ResultSet (java.sql.ResultSet)1 SQLException (java.sql.SQLException)1 Player (org.bukkit.entity.Player)1 ItemStack (org.bukkit.inventory.ItemStack)1 ItemMeta (org.bukkit.inventory.meta.ItemMeta)1