Examples

/** 
 * @author Facuu16
 * @version 1.0.1
 * 
 * 11/11/23
 * Made for versions 1.9 onwards
 * Free use and modification!
*/

import("org.bukkit.event.block.Action");
import("org.bukkit.entity.EntityType");
import("org.bukkit.Effect");
import("org.bukkit.Sound");
import("org.bukkit.Material");

var weapon = API.newItemBuilder(API.getSkull("bb2abd66939f4cb7257a88cf52fbc6fdceec1433ec2a6ef16d62e34f6238781"))
                .setName("&bWeapon")
                .addLore("&8Right click &7to shoot!")
                .build();

var options = {
    visual: {
        particle: Effect.COLOURED_DUST,
        particleAmount: 1,
        sound: Sound.ENTITY_FIREWORK_BLAST,
        volume: 10,
        pitch: 1.8
    },

    stats: {
        damage: 5
    }
};

function build(build) {
    build.registerCommand(CommandInfo.builder()
        .name("weapon")
        .permission("mcjs.commands.weapon")
        .usage("weapon <get>")
        .target(CommandTarget.PLAYER)
        .build(), function (context) {
            var sender = context.getSender();
            var arg = context.getArg(0);

            if (arg == null) {
                API.message(sender, "&cUsage: /weapon <get>");
                return false;
            }

            switch (String(arg.toLowerCase())) {
                case "get":
                    sender.getInventory().addItem(weapon);
                    break;

                default:
                    API.message(sender, "&cUsage: /weapon <get>");
                    break;
            }

            return true;
        });

    build.registerListener("org.bukkit.event.player.PlayerInteractEvent", function (event) {
        if (!event.getAction().equals(Action.RIGHT_CLICK_AIR))
            return;
    
        var player = event.getPlayer();
    
        if (!player.getEquipment().getItemInMainHand().equals(weapon))
            return;
    
        var location = player.getLocation().clone();
        var world = location.getWorld();

        player.getWorld().playSound(location, options.visual.sound, options.visual.volume, options.visual.pitch);
        location.setY(location.getY() + 1.1);

        var vector = location.getDirection().multiply(0.35);

        for (var i = 0; i < 40; i++) {
            var current = location.add(vector);
            var block = current.getBlock();

            if (block == null)
                continue;

            if (block.getType() != Material.AIR)
                break;
            
            var entities = world.getNearbyEntities(current, 0.5, 0.5, 0.5);

            if (entities.isEmpty()) {
                world.playEffect(current, options.visual.particle, options.visual.particleAmount);
                continue;
            }

            for (var i in entities) {
                var entity = entities.get(i);

                if (entity.getType() == EntityType.PLAYER && entity.getName().equals(player.getName()))
                    continue;

                API.damage(entity, options.stats.damage);
            }
        }
    });

    build.registerListener("org.bukkit.event.block.BlockPlaceEvent", function (event) {
        if (event.getPlayer().getEquipment().getItemInMainHand().equals(weapon))
            event.setCancelled(true);
    });
}

This script adds a customizable weapon. It can be used in versions 1.9 onwards (with modifications it can be compatible with previous versions). COMMANDS:

  • /weapon (mcjs.commands.weapon)

Last updated