MCJS
  • Getting Started
  • Your First Script
  • Importation
  • Listeners
  • Commands
  • JavaDocs
  • Examples
Powered by GitBook
On this page

Examples

PreviousJavaDocs

Last updated 1 year ago

/** 
 * @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)

Command Example

function build(build) {
    build.registerCommand(CommandInfo.builder()
        .name("command")
        .aliases(["c", "cmd"])
        .description("Simple MCJS example command!")
        .permission("commands.command")
        .target(CommandTarget.ALL)
        .async(false)
        .build(), function (context) {
            API.message(context.getSender(), "&aHello World!");
            return true;
        });
}

Clickable Message Example

import ("net.md_5.bungee.api.chat.ClickEvent");
import ("net.md_5.bungee.api.chat.HoverEvent");

function build(build) {
    build.registerCommand(CommandInfo.builder()
        .name("youtube")
        .aliases(["yt"])
        .permission("commands.youtube")
        .target(CommandTarget.PLAYER)
        .build(), function (context) {
            var player = context.getSender();

            API.newClickableMessage()
                .setMessage("&cClick to see my YouTube channel!")
                .setHoverEvent(HoverEvent.Action.SHOW_TEXT, "&cCLICK HERE")
                .setClickEvent(ClickEvent.Action.OPEN_URL, "https://www.youtube.com/watch?v=dQw4w9WgXcQ")
                .send(player);

            return true;
        });
}

Yaml Example

import("java.nio.file.Paths");
import("com.facuu16.mcjs.flib.configuration.impl.Yaml");

function build(build) {
    var yaml = new Yaml(
        "yaml-example",
        Paths.get(API.getPlugin().getDataFolder().getPath(), "scripts", "storage").toString()
    );

    var data = yaml.getData();

    data.set("example", "example!");
    yaml.save();
}

Listener Example

import("org.bukkit.event.player.PlayerJoinEvent");

function build(build) {
    build.registerListener(PlayerJoinEvent, function (event) {
        API.message(event.getPlayer(), "&aWelcome to the server!");
    });
}

Prompt Example

import("org.bukkit.Material");
import("org.bukkit.entity.Player");

function build(build) {
    build.registerCommand(CommandInfo.builder()
        .name("prompt")
        .target(CommandTarget.PLAYER)
        .build(), function (context) {
            var sender = context.getSender();

            API.newBlockPrompt()
                .setPrompt("&aBreak a block to select it!")
                .setFunction(function (player, block) {
                    API.message(sender, "&aBlock selected!");
                    return PromptResult.ACCEPT;
                })
                .then(function (player, block) {
                    API.newChatPrompt("java.lang.String")
                        .setPrompt("&aType a material name in the chat or 'cancel' to cancel...")
                        .setFunction(function (player, input) {
                            if (input.equalsIgnoreCase("cancel")) {
                                API.message(sender, "&cCanceling...");
                                return PromptResult.CANCEL;
                            }

                            try {
                                var material = Material.valueOf(input);

                                API.sendBlockChange(sender, block.getLocation(), material);
                                API.message(sender, "&aMaterial changed to: &e" + material.name());
                                return PromptResult.ACCEPT;
                            } catch (ex) {
                                API.message(sender, "&cInvalid material! Type another...");
                                return PromptResult.REJECT;
                            }
                        }).send(sender);
                }).send(sender);

            return true;
        });
}

Skull Example

function build(build) {
    build.registerCommand(CommandInfo.builder()
        .name("skull")
        .aliases(["s"])
        .description("Get a textured skull!")
        .permission("commands.skull")
        .usage("skull <minecraft-url>")
        .target(CommandTarget.PLAYER)
        .build(), function (context) {
            var sender = context.getSender();
            var url = context.getArg(0);

            if (url == null) {
                API.message(sender, "&cUsage: /skull <minecraft-url>");
                return false;
            }

            sender.getInventory().addItem(API.getSkull(url));
            API.message(sender, "&aSkull given!");
            return true;
        });
}

Task Example

function build(build) {
    build.registerCommand(CommandInfo.builder()
        .name("task")
        .aliases(["t"])
        .description("MCJS task examples.")
        .permission("commands.task")
        .usage("task <task>")
        .target(CommandTarget.ALL)
        .build(), function (context) {
            var sender = context.getSender();
            var task = context.getArg(0);

            if (task == null) {
                API.message(sender, "&cUsage: /task <async, later, repeating, timer>");
                return false;
            }

            switch (String(task.toLowerCase())) {
                case "async":
                    API.runAsync(function() {
                        API.message(sender, "&aAsync task!");
                    });

                    break;

                case "later":
                    API.runLater(function() {
                        API.message(sender, "&aMessage sent after 5s!");
                    }, 100);

                    break;

                case "repeating":
                    API.runRepeating(function() {
                        API.message(sender, "&aMessage sent every 15s!");
                    }, 20, 300);

                    break;

                case "timer":
                    API.runTimer(function () {
                        API.message(sender, "&aMessage sent every 1s 5 times!");
                    }, 20, 5);

                    break;

                default:
                    API.message(sender, "&cInvalid option!");
                    break;
            }

            return true;
        });
}