2019-01-19 16:52:04 +01:00
|
|
|
package world.bentobox.greenhouses.ui.user;
|
|
|
|
|
2019-10-12 18:31:51 +02:00
|
|
|
import java.util.ArrayList;
|
2019-01-19 16:52:04 +01:00
|
|
|
import java.util.List;
|
2019-10-12 18:31:51 +02:00
|
|
|
import java.util.Map;
|
|
|
|
import java.util.Optional;
|
|
|
|
import java.util.stream.Collectors;
|
2019-01-19 16:52:04 +01:00
|
|
|
|
2019-01-22 00:44:01 +01:00
|
|
|
import org.bukkit.Bukkit;
|
|
|
|
import org.bukkit.Location;
|
|
|
|
import org.bukkit.Material;
|
|
|
|
import org.bukkit.util.Vector;
|
2019-01-19 16:52:04 +01:00
|
|
|
|
|
|
|
import world.bentobox.bentobox.api.commands.CompositeCommand;
|
2019-10-12 18:31:51 +02:00
|
|
|
import world.bentobox.bentobox.api.localization.TextVariables;
|
2019-01-19 16:52:04 +01:00
|
|
|
import world.bentobox.bentobox.api.user.User;
|
2019-10-12 18:31:51 +02:00
|
|
|
import world.bentobox.bentobox.util.Util;
|
2019-01-22 00:44:01 +01:00
|
|
|
import world.bentobox.greenhouses.Greenhouses;
|
2019-02-08 00:17:55 +01:00
|
|
|
import world.bentobox.greenhouses.greenhouse.BiomeRecipe;
|
2019-01-22 00:44:01 +01:00
|
|
|
import world.bentobox.greenhouses.managers.GreenhouseManager.GhResult;
|
|
|
|
import world.bentobox.greenhouses.managers.GreenhouseManager.GreenhouseResult;
|
2019-02-08 00:17:55 +01:00
|
|
|
import world.bentobox.greenhouses.ui.panel.Panel;
|
2019-01-19 16:52:04 +01:00
|
|
|
|
|
|
|
/**
|
2019-01-26 20:10:30 +01:00
|
|
|
* Command to try to make a greenhouse
|
2019-01-19 16:52:04 +01:00
|
|
|
* @author tastybento
|
|
|
|
*
|
|
|
|
*/
|
2019-02-08 00:17:55 +01:00
|
|
|
class MakeCommand extends CompositeCommand {
|
2019-01-19 16:52:04 +01:00
|
|
|
|
|
|
|
/**
|
2019-01-26 17:38:13 +01:00
|
|
|
* @param parent - parent command
|
2019-01-19 16:52:04 +01:00
|
|
|
*/
|
|
|
|
public MakeCommand(CompositeCommand parent) {
|
|
|
|
super(parent, "make");
|
|
|
|
}
|
|
|
|
|
|
|
|
/* (non-Javadoc)
|
|
|
|
* @see world.bentobox.bentobox.api.commands.BentoBoxCommand#setup()
|
|
|
|
*/
|
|
|
|
@Override
|
|
|
|
public void setup() {
|
2019-01-26 20:10:30 +01:00
|
|
|
this.setPermission("greenhouses.player");
|
|
|
|
this.setOnlyPlayer(true);
|
|
|
|
this.setParametersHelp("greenhouses.commands.user.make.parameters");
|
|
|
|
this.setDescription("greenhouses.commands.user.make.description");
|
2019-01-19 16:52:04 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/* (non-Javadoc)
|
|
|
|
* @see world.bentobox.bentobox.api.commands.BentoBoxCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)
|
|
|
|
*/
|
|
|
|
@Override
|
|
|
|
public boolean execute(User user, String label, List<String> args) {
|
2019-02-08 00:17:55 +01:00
|
|
|
if (args.isEmpty()) {
|
|
|
|
new Panel((Greenhouses)this.getAddon()).ShowPanel(user);
|
|
|
|
return true;
|
|
|
|
}
|
2019-10-12 18:31:51 +02:00
|
|
|
// Check recipe given matches
|
|
|
|
BiomeRecipe br = getRecipe(user, args.get(0));
|
|
|
|
if (br == null) {
|
|
|
|
user.sendMessage("greenhouses.commands.user.make.unknown-recipe");
|
|
|
|
user.sendMessage("greenhouses.commands.user.make.try-these");
|
|
|
|
getRecipes(user).forEach((k,v) -> user.sendMessage("greenhouses.commands.user.make.recipe-format", TextVariables.NAME, v.getName()));
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
return makeGreenhouse(user, br);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get a recipe for user
|
|
|
|
* @param user - user
|
|
|
|
* @param arg - given string
|
|
|
|
* @return recipe or null if unknown
|
|
|
|
*/
|
|
|
|
private BiomeRecipe getRecipe(User user, String arg) {
|
|
|
|
return getRecipes(user).get(arg);
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Get a string list of recipies the player has permission to use
|
|
|
|
* @param user - user
|
|
|
|
* @return list
|
|
|
|
*/
|
|
|
|
private Map<String, BiomeRecipe> getRecipes(User user) {
|
|
|
|
return ((Greenhouses)getAddon()).getRecipes().getBiomeRecipes().stream()
|
|
|
|
.filter(br -> user.hasPermission(br.getPermission()))
|
|
|
|
.collect(Collectors.toMap(br -> br.getName(), br -> br));
|
2019-02-08 00:17:55 +01:00
|
|
|
}
|
2019-03-02 19:53:15 +01:00
|
|
|
|
2019-02-08 00:17:55 +01:00
|
|
|
private boolean makeGreenhouse(User user, BiomeRecipe br) {
|
2019-01-26 20:10:30 +01:00
|
|
|
// Check flag
|
|
|
|
if (!getIslands().getIslandAt(user.getLocation()).map(i -> i.isAllowed(user, Greenhouses.GREENHOUSES)).orElse(false)) {
|
|
|
|
user.sendMessage("greenhouses.errors.no-rank");
|
|
|
|
return false;
|
|
|
|
}
|
2019-01-22 00:44:01 +01:00
|
|
|
// Find the physical the greenhouse
|
|
|
|
Location location = user.getLocation().add(new Vector(0,1,0));
|
|
|
|
// Check if there's a gh here already
|
|
|
|
if (((Greenhouses)this.getAddon()).getManager().getMap().getGreenhouse(location).isPresent()) {
|
2019-01-26 20:10:30 +01:00
|
|
|
user.sendMessage("greenhouses.commands.user.make.error.already");
|
|
|
|
return false;
|
2019-01-19 16:52:04 +01:00
|
|
|
}
|
2019-02-08 00:17:55 +01:00
|
|
|
GhResult result = ((Greenhouses)this.getAddon()).getManager().tryToMakeGreenhouse(location, br);
|
2019-01-22 02:53:34 +01:00
|
|
|
if (result.getResults().contains(GreenhouseResult.SUCCESS)) {
|
2019-01-22 00:44:01 +01:00
|
|
|
// Success
|
2019-01-26 20:10:30 +01:00
|
|
|
user.sendMessage("greenhouses.commands.user.make.success", "[biome]", result.getFinder().getGh().getBiomeRecipe().getFriendlyName());
|
2019-01-19 16:52:04 +01:00
|
|
|
return true;
|
|
|
|
}
|
2019-01-26 20:10:30 +01:00
|
|
|
result.getResults().forEach(r -> user.sendMessage("greenhouses.commands.user.make.error." + r.name()));
|
2019-01-22 00:44:01 +01:00
|
|
|
if (!result.getFinder().getRedGlass().isEmpty()) {
|
|
|
|
// Show red glass
|
2019-01-26 17:38:13 +01:00
|
|
|
result.getFinder().getRedGlass().forEach(rg -> user.getPlayer().sendBlockChange(rg, Material.RED_STAINED_GLASS.createBlockData()));
|
|
|
|
Bukkit.getScheduler().runTaskLater(getPlugin(), () -> result.getFinder().getRedGlass().forEach(rg -> user.getPlayer().sendBlockChange(rg, rg.getBlock().getBlockData())), 120L);
|
2019-01-22 00:44:01 +01:00
|
|
|
}
|
2019-10-12 18:31:51 +02:00
|
|
|
if (br != null && result.getResults().contains(GreenhouseResult.FAIL_INSUFFICIENT_BLOCKS)) {
|
|
|
|
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-01-22 00:44:01 +01:00
|
|
|
return true;
|
|
|
|
}
|
2019-03-02 19:53:15 +01:00
|
|
|
|
2019-10-12 18:31:51 +02:00
|
|
|
@Override
|
|
|
|
public Optional<List<String>> tabComplete(User user, String alias, List<String> args) {
|
|
|
|
return Optional.of(new ArrayList<String>(this.getRecipes(user).keySet()));
|
|
|
|
}
|
|
|
|
|
2019-01-22 00:44:01 +01:00
|
|
|
}
|