Search in sources :

Example 1 with CruiseOnPilotSubCraft

use of net.countercraft.movecraft.craft.CruiseOnPilotSubCraft in project Movecraft by APDevTeam.

the class CraftSign method onSignClick.

@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onSignClick(@NotNull PlayerInteractEvent event) {
    if (event.getAction() != Action.RIGHT_CLICK_BLOCK || event.getClickedBlock() == null)
        return;
    BlockState state = event.getClickedBlock().getState();
    if (!(state instanceof Sign))
        return;
    Sign sign = (Sign) state;
    CraftType craftType = CraftManager.getInstance().getCraftTypeFromString(ChatColor.stripColor(sign.getLine(0)));
    if (craftType == null)
        return;
    // Valid sign prompt for ship command.
    Player player = event.getPlayer();
    if (!player.hasPermission("movecraft." + ChatColor.stripColor(sign.getLine(0)) + ".pilot")) {
        player.sendMessage(I18nSupport.getInternationalisedString("Insufficient Permissions"));
        return;
    }
    Location loc = event.getClickedBlock().getLocation();
    MovecraftLocation startPoint = new MovecraftLocation(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ());
    if (piloting.contains(startPoint)) {
        event.setCancelled(true);
        return;
    }
    // Attempt to run detection
    World world = event.getClickedBlock().getWorld();
    CraftManager.getInstance().detect(startPoint, craftType, (type, w, p, parents) -> {
        // Note: This only passes in a non-null player.
        assert p != null;
        if (type.getBoolProperty(CraftType.CRUISE_ON_PILOT)) {
            if (parents.size() > 1)
                return new Pair<>(Result.failWithMessage(I18nSupport.getInternationalisedString("Detection - Failed - Already commanding a craft")), null);
            if (parents.size() == 1) {
                Craft parent = parents.iterator().next();
                return new Pair<>(Result.succeed(), new CruiseOnPilotSubCraft(type, world, p, parent));
            }
            return new Pair<>(Result.succeed(), new CruiseOnPilotCraft(type, world, p));
        } else {
            if (parents.size() > 0)
                return new Pair<>(Result.failWithMessage(I18nSupport.getInternationalisedString("Detection - Failed - Already commanding a craft")), null);
            return new Pair<>(Result.succeed(), new PlayerCraftImpl(type, w, p));
        }
    }, world, player, Movecraft.getAdventure().player(player), craft -> () -> {
        Bukkit.getServer().getPluginManager().callEvent(new CraftPilotEvent(craft, CraftPilotEvent.Reason.PLAYER));
        if (craft instanceof SubCraft) {
            // Subtract craft from the parent
            Craft parent = ((SubCraft) craft).getParent();
            var newHitbox = parent.getHitBox().difference(craft.getHitBox());
            ;
            parent.setHitBox(newHitbox);
            parent.setOrigBlockCount(parent.getOrigBlockCount() - craft.getHitBox().size());
        }
        if (craft.getType().getBoolProperty(CraftType.CRUISE_ON_PILOT)) {
            // Setup cruise direction
            if (sign.getBlockData() instanceof WallSign)
                craft.setCruiseDirection(CruiseDirection.fromBlockFace(((WallSign) sign.getBlockData()).getFacing()));
            else
                craft.setCruiseDirection(CruiseDirection.NONE);
            // Start craft cruising
            craft.setLastCruiseUpdate(System.currentTimeMillis());
            craft.setCruising(true);
            // Stop craft cruising and sink it in 15 seconds
            new BukkitRunnable() {

                @Override
                public void run() {
                    craft.setCruising(false);
                    CraftManager.getInstance().sink(craft);
                }
            }.runTaskLater(Movecraft.getInstance(), (20 * 15));
        } else {
            // Release old craft if it exists
            Craft oldCraft = CraftManager.getInstance().getCraftByPlayer(player);
            if (oldCraft != null)
                CraftManager.getInstance().release(oldCraft, CraftReleaseEvent.Reason.PLAYER, false);
        }
    });
    event.setCancelled(true);
    new BukkitRunnable() {

        @Override
        public void run() {
            piloting.remove(startPoint);
        }
    }.runTaskLater(Movecraft.getInstance(), 4);
}
Also used : WallSign(org.bukkit.block.data.type.WallSign) Player(org.bukkit.entity.Player) CruiseOnPilotCraft(net.countercraft.movecraft.craft.CruiseOnPilotCraft) CruiseOnPilotSubCraft(net.countercraft.movecraft.craft.CruiseOnPilotSubCraft) Craft(net.countercraft.movecraft.craft.Craft) SubCraft(net.countercraft.movecraft.craft.SubCraft) CruiseOnPilotCraft(net.countercraft.movecraft.craft.CruiseOnPilotCraft) BukkitRunnable(org.bukkit.scheduler.BukkitRunnable) World(org.bukkit.World) CraftPilotEvent(net.countercraft.movecraft.events.CraftPilotEvent) CruiseOnPilotSubCraft(net.countercraft.movecraft.craft.CruiseOnPilotSubCraft) PlayerCraftImpl(net.countercraft.movecraft.craft.PlayerCraftImpl) BlockState(org.bukkit.block.BlockState) WallSign(org.bukkit.block.data.type.WallSign) Sign(org.bukkit.block.Sign) CruiseOnPilotSubCraft(net.countercraft.movecraft.craft.CruiseOnPilotSubCraft) SubCraft(net.countercraft.movecraft.craft.SubCraft) MovecraftLocation(net.countercraft.movecraft.MovecraftLocation) CraftType(net.countercraft.movecraft.craft.type.CraftType) Location(org.bukkit.Location) MovecraftLocation(net.countercraft.movecraft.MovecraftLocation) Pair(net.countercraft.movecraft.util.Pair) EventHandler(org.bukkit.event.EventHandler)

Aggregations

MovecraftLocation (net.countercraft.movecraft.MovecraftLocation)1 Craft (net.countercraft.movecraft.craft.Craft)1 CruiseOnPilotCraft (net.countercraft.movecraft.craft.CruiseOnPilotCraft)1 CruiseOnPilotSubCraft (net.countercraft.movecraft.craft.CruiseOnPilotSubCraft)1 PlayerCraftImpl (net.countercraft.movecraft.craft.PlayerCraftImpl)1 SubCraft (net.countercraft.movecraft.craft.SubCraft)1 CraftType (net.countercraft.movecraft.craft.type.CraftType)1 CraftPilotEvent (net.countercraft.movecraft.events.CraftPilotEvent)1 Pair (net.countercraft.movecraft.util.Pair)1 Location (org.bukkit.Location)1 World (org.bukkit.World)1 BlockState (org.bukkit.block.BlockState)1 Sign (org.bukkit.block.Sign)1 WallSign (org.bukkit.block.data.type.WallSign)1 Player (org.bukkit.entity.Player)1 EventHandler (org.bukkit.event.EventHandler)1 BukkitRunnable (org.bukkit.scheduler.BukkitRunnable)1