2018-02-25 03:42:52 +01:00
|
|
|
package bskyblock.addon.challenges.commands.admin;
|
|
|
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.UUID;
|
|
|
|
|
2018-02-25 06:29:09 +01:00
|
|
|
import org.bukkit.entity.Player;
|
|
|
|
import org.bukkit.event.Cancellable;
|
2018-02-25 03:42:52 +01:00
|
|
|
import org.bukkit.event.EventHandler;
|
|
|
|
import org.bukkit.event.EventPriority;
|
|
|
|
import org.bukkit.event.Listener;
|
|
|
|
import org.bukkit.event.block.Action;
|
|
|
|
import org.bukkit.event.block.BlockBreakEvent;
|
2018-02-25 06:29:09 +01:00
|
|
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
|
|
|
import org.bukkit.event.player.PlayerInteractAtEntityEvent;
|
2018-02-25 03:42:52 +01:00
|
|
|
import org.bukkit.event.player.PlayerInteractEvent;
|
|
|
|
import org.bukkit.event.player.PlayerQuitEvent;
|
|
|
|
|
|
|
|
import bskyblock.addon.challenges.ChallengesAddon;
|
|
|
|
import us.tastybento.bskyblock.Constants;
|
|
|
|
import us.tastybento.bskyblock.api.commands.CompositeCommand;
|
2018-03-12 01:36:06 +01:00
|
|
|
import us.tastybento.bskyblock.api.user.User;
|
2018-02-26 07:44:57 +01:00
|
|
|
import us.tastybento.bskyblock.util.Util;
|
2018-02-25 03:42:52 +01:00
|
|
|
|
2018-02-26 07:44:57 +01:00
|
|
|
/**
|
|
|
|
* Command to create a surrounding type challenge
|
|
|
|
* @author tastybento
|
|
|
|
*
|
|
|
|
*/
|
2018-02-25 03:42:52 +01:00
|
|
|
public class CreateSurrounding extends CompositeCommand implements Listener {
|
|
|
|
|
|
|
|
|
|
|
|
private ChallengesAddon addon;
|
2018-02-25 06:29:09 +01:00
|
|
|
HashMap<UUID,SurroundChallengeBuilder> inProgress = new HashMap<>();
|
2018-02-25 03:42:52 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Admin command to make surrounding challenges
|
|
|
|
* @param parent
|
|
|
|
*/
|
|
|
|
public CreateSurrounding(ChallengesAddon addon, CompositeCommand parent) {
|
|
|
|
super(parent, "surrounding");
|
|
|
|
this.addon = addon;
|
|
|
|
addon.getServer().getPluginManager().registerEvents(this, addon.getBSkyBlock());
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void setup() {
|
|
|
|
this.setOnlyPlayer(true);
|
|
|
|
this.setPermission(Constants.PERMPREFIX + "admin.challenges");
|
|
|
|
this.setParameters("challaneges.admin.create.surrounding.parameters");
|
|
|
|
this.setDescription("challenges.admin.create.surrounding.description");
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean execute(User user, List<String> args) {
|
|
|
|
if (args.isEmpty()) {
|
2018-02-26 07:44:57 +01:00
|
|
|
user.sendMessage("challenges.admin.error.no-name");
|
2018-02-25 03:42:52 +01:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
// Tell user to hit objects to add to the surrounding object requirements
|
2018-02-26 07:44:57 +01:00
|
|
|
user.sendMessage("challenges.admin.create.surrounding.hit-things");
|
2018-02-25 06:29:09 +01:00
|
|
|
inProgress.put(user.getUniqueId(), new SurroundChallengeBuilder(addon).owner(user).name(args.get(0)));
|
2018-02-25 03:42:52 +01:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
|
|
|
|
public void onBlockBreak(BlockBreakEvent e) {
|
2018-02-25 06:29:09 +01:00
|
|
|
e.setCancelled(inProgress.containsKey(e.getPlayer().getUniqueId()) ? true : false);
|
2018-02-25 03:42:52 +01:00
|
|
|
}
|
2018-02-25 06:29:09 +01:00
|
|
|
|
2018-02-25 03:42:52 +01:00
|
|
|
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
|
|
|
|
public void onPlayerQuit(PlayerQuitEvent e) {
|
2018-02-25 06:29:09 +01:00
|
|
|
inProgress.remove(e.getPlayer().getUniqueId());
|
2018-02-25 03:42:52 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
|
2018-02-25 06:29:09 +01:00
|
|
|
public boolean onPlayerInteract(PlayerInteractEvent e) {
|
2018-02-25 03:42:52 +01:00
|
|
|
if (e.getAction().equals(Action.LEFT_CLICK_BLOCK)) {
|
2018-02-25 06:29:09 +01:00
|
|
|
if (inProgress.containsKey(e.getPlayer().getUniqueId())) {
|
2018-02-25 03:42:52 +01:00
|
|
|
// Prevent damage
|
|
|
|
e.setCancelled(true);
|
2018-02-25 06:29:09 +01:00
|
|
|
inProgress.get(e.getPlayer().getUniqueId()).addBlock(e.getClickedBlock().getType());
|
2018-02-26 07:44:57 +01:00
|
|
|
User.getInstance(e.getPlayer()).sendMessage("challenges.admin.you-added", "[thing]", Util.prettifyText(e.getClickedBlock().getType().toString()));
|
2018-02-25 06:29:09 +01:00
|
|
|
return true;
|
|
|
|
}
|
2018-02-25 03:42:52 +01:00
|
|
|
}
|
|
|
|
if (e.getAction().equals(Action.RIGHT_CLICK_BLOCK)) {
|
2018-02-25 06:29:09 +01:00
|
|
|
return finished(e, e.getPlayer().getUniqueId());
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
private boolean finished(Cancellable e, UUID uuid) {
|
|
|
|
if (inProgress.containsKey(uuid)) {
|
|
|
|
e.setCancelled(true);
|
|
|
|
boolean status = inProgress.get(uuid).build();
|
2018-02-26 07:44:57 +01:00
|
|
|
if (status) {
|
|
|
|
inProgress.get(uuid).getOwner().sendMessage("challenges.admin.challenge-created", "[challenge]", inProgress.get(uuid).getName());
|
|
|
|
}
|
2018-02-25 06:29:09 +01:00
|
|
|
inProgress.remove(uuid);
|
|
|
|
return status;
|
2018-02-25 03:42:52 +01:00
|
|
|
}
|
2018-02-25 06:29:09 +01:00
|
|
|
return false;
|
2018-02-25 03:42:52 +01:00
|
|
|
}
|
2018-02-25 06:29:09 +01:00
|
|
|
|
|
|
|
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
|
|
|
|
public boolean onPlayerInteract(PlayerInteractAtEntityEvent e) {
|
|
|
|
return finished(e, e.getPlayer().getUniqueId());
|
|
|
|
}
|
|
|
|
|
|
|
|
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
|
|
|
|
public boolean onLeft(EntityDamageByEntityEvent e) {
|
|
|
|
if (!(e.getDamager() instanceof Player)) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
Player player = (Player)e.getDamager();
|
|
|
|
if (inProgress.containsKey(player.getUniqueId())) {
|
|
|
|
// Prevent damage
|
|
|
|
e.setCancelled(true);
|
|
|
|
inProgress.get(player.getUniqueId()).addEntity(e.getEntityType());
|
2018-02-26 07:44:57 +01:00
|
|
|
User.getInstance(player).sendMessage("challenges.admin.you-added", "[thing]", Util.prettifyText(e.getEntityType().toString()));
|
2018-02-25 06:29:09 +01:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2018-02-25 03:42:52 +01:00
|
|
|
}
|