2019-02-08 00:17:55 +01:00
|
|
|
package world.bentobox.greenhouses.ui.panel;
|
|
|
|
|
|
|
|
import org.bukkit.Bukkit;
|
|
|
|
import org.bukkit.Location;
|
|
|
|
import org.bukkit.Material;
|
|
|
|
import org.bukkit.event.inventory.ClickType;
|
|
|
|
import org.bukkit.util.Vector;
|
|
|
|
|
2019-10-12 03:52:32 +02:00
|
|
|
import world.bentobox.bentobox.api.localization.TextVariables;
|
2019-02-08 00:17:55 +01:00
|
|
|
import world.bentobox.bentobox.api.panels.Panel;
|
|
|
|
import world.bentobox.bentobox.api.panels.PanelItem.ClickHandler;
|
|
|
|
import world.bentobox.bentobox.api.user.User;
|
2019-10-12 03:52:32 +02:00
|
|
|
import world.bentobox.bentobox.util.Util;
|
2019-02-08 00:17:55 +01:00
|
|
|
import world.bentobox.greenhouses.Greenhouses;
|
|
|
|
import world.bentobox.greenhouses.greenhouse.BiomeRecipe;
|
|
|
|
import world.bentobox.greenhouses.managers.GreenhouseManager.GhResult;
|
|
|
|
import world.bentobox.greenhouses.managers.GreenhouseManager.GreenhouseResult;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @author tastybento
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
public class PanelClick implements ClickHandler {
|
|
|
|
|
2021-08-01 08:10:07 +02:00
|
|
|
private final Greenhouses addon;
|
|
|
|
private final BiomeRecipe br;
|
2019-02-08 00:17:55 +01:00
|
|
|
|
|
|
|
public PanelClick(Greenhouses addon, BiomeRecipe br) {
|
|
|
|
this.addon = addon;
|
|
|
|
this.br = br;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* (non-Javadoc)
|
|
|
|
* @see world.bentobox.bentobox.api.panels.PanelItem.ClickHandler#onClick(world.bentobox.bentobox.api.panels.Panel, world.bentobox.bentobox.api.user.User, org.bukkit.event.inventory.ClickType, int)
|
|
|
|
*/
|
|
|
|
@Override
|
|
|
|
public boolean onClick(Panel panel, User user, ClickType clickType, int slot) {
|
|
|
|
if (user.hasPermission(br.getPermission())) {
|
2019-03-02 19:53:15 +01:00
|
|
|
user.closeInventory();
|
2019-02-08 00:17:55 +01:00
|
|
|
makeGreenhouse(user, br);
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
private boolean makeGreenhouse(User user, BiomeRecipe br) {
|
|
|
|
// Check flag
|
|
|
|
if (!addon.getIslands().getIslandAt(user.getLocation()).map(i -> i.isAllowed(user, Greenhouses.GREENHOUSES)).orElse(false)) {
|
|
|
|
user.sendMessage("greenhouses.errors.no-rank");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
// Find the physical the greenhouse
|
|
|
|
Location location = user.getLocation().add(new Vector(0,1,0));
|
|
|
|
// Check if there's a gh here already
|
|
|
|
if (addon.getManager().getMap().getGreenhouse(location).isPresent()) {
|
|
|
|
user.sendMessage("greenhouses.commands.user.make.error.already");
|
|
|
|
return false;
|
|
|
|
}
|
2021-01-16 18:16:09 +01:00
|
|
|
addon.getManager().tryToMakeGreenhouse(location, br).thenAccept(r -> processResult(user, r));
|
|
|
|
return true;
|
|
|
|
}
|
2019-02-08 00:17:55 +01:00
|
|
|
|
2021-01-16 18:16:09 +01:00
|
|
|
void processResult(User user, GhResult result) {
|
2019-02-08 00:17:55 +01:00
|
|
|
if (result.getResults().contains(GreenhouseResult.SUCCESS)) {
|
|
|
|
// Success
|
|
|
|
user.sendMessage("greenhouses.commands.user.make.success", "[biome]", result.getFinder().getGh().getBiomeRecipe().getFriendlyName());
|
2021-01-16 18:16:09 +01:00
|
|
|
return;
|
2019-02-08 00:17:55 +01:00
|
|
|
}
|
|
|
|
result.getResults().forEach(r -> user.sendMessage("greenhouses.commands.user.make.error." + r.name()));
|
|
|
|
if (!result.getFinder().getRedGlass().isEmpty()) {
|
|
|
|
// Show red glass
|
2021-01-17 03:57:01 +01:00
|
|
|
result.getFinder().getRedGlass().stream().map(v -> v.toLocation(user.getWorld())).forEach(rg -> user.getPlayer().sendBlockChange(rg, Material.RED_STAINED_GLASS.createBlockData()));
|
|
|
|
Bukkit.getScheduler().runTaskLater(addon.getPlugin(), () -> result.getFinder().getRedGlass().stream().map(v -> v.toLocation(user.getWorld())).forEach(rg -> user.getPlayer().sendBlockChange(rg, rg.getBlock().getBlockData())), 120L);
|
2019-02-08 00:17:55 +01:00
|
|
|
}
|
2019-10-12 03:52:32 +02:00
|
|
|
if (result.getResults().contains(GreenhouseResult.FAIL_INSUFFICIENT_BLOCKS)) {
|
2021-01-16 18:16:09 +01:00
|
|
|
result.getFinder().getGh().getMissingBlocks().forEach((k,v) -> user.sendMessage("greenhouses.commands.user.make.missing-blocks", "[material]", Util.prettifyText(k.toString()), TextVariables.NUMBER, String.valueOf(v)));
|
2019-10-12 03:52:32 +02:00
|
|
|
}
|
2019-02-08 00:17:55 +01:00
|
|
|
}
|
|
|
|
}
|