WingedSeal / jmc

A compiler for JMC (JavaScript-like Minecraft Function), a mcfunction extension language for making Minecraft Datapack
https://jmc.wingedseal.com
MIT License
64 stars 10 forks source link
compiler mcfunction minecraft preprocessor

JMC · license-mit release build-passing discord-invite

(JavaScript-like Minecraft Function)

JMC (JavaScript-like Minecraft Function) is a mcfunction extension language for making Minecraft Datapack.

JMC-icon

Code example:

Text.tellraw(@a, "everything outside the function");
say "just goes into the load function";

function myFunc() { // function
    execute as @a at @s run {
        Text.tellraw(@a, "&<green,bold> this text is green and bold");
        say "this is a function executed through execute as @a";
    }
}
function varOperations() {
    // this variable x is equal to the number of items in hand
    $x = data get entity @s SelectedItem.Count;
    $y = 100; // this is the second variable
    $z = @s::SelectedItem.Count; // the same as $x
    $random_int = Math.random($x, $y);
    Text.tellraw(@a, "random number from &<$x> to 100: &<$random_int>");
}
class folder {
    function funcInFolder() {
        if ($x < $y && $random_int <= 50) {
            printf("X is less than Y and random number is less than or equal to 50");
        } else if ($y > $x || $x == 69) {
            printf("X is greater than Y or X is equal to 69 ($x is &<$x>)");
        } else {
            printf("&6other cases"); // "printf" is shortcut for "tellraw @a" but works with custom formatting
        }
    }
}
function folder.raycast() {
    Raycast.simple(
        onHit=()=>{
            printf("i hit some block");
        },
        onStep=()=>{
            particle happy_villager ~ ~ ~;
        }
        interval=0.5,
        maxIter=100,
        stopAtBlock=true,
    );
}

Documentation: https://jmc.wingedseal.com

Trailer: https://www.youtube.com/watch?v=cFgvCScpirw&ab_channel=WingedSeal


Why use JMC?

JMC allows you to write minecraft functions in a better language (.jmc) which is more readable and easier to write.

Documentation

Everything you need to know about JMC can be found at https://jmc.wingedseal.com

Installation

In "datapacks" folder of your world file (Usually .minecraft/saves/world_name/datapacks). Create a new datapack folder. And put JMC.exe in that folder then run it.

Installation

pip install jmcfunction --pre

Latest unreleased build:

pip install git+https://github.com/WingedSeal/jmc.git#subdirectory=src

Build

Executable

If you would like to build the executable yourself (on Windows).

  1. Install Python 3.10
  2. Install GNU compiler
  3. Open command prompt as administrator
  4. Go to repository directory using cd
  5. Run pip install -r build_requirements.txt
  6. Run build

Python

If you would like to use latest unreleased feature, you can install jmc directly from github repository.

  1. Install Python 3.10
  2. Open a terminal (command prompt as administrator on Windows)
  3. Go to repository directory using cd
  4. Run cd ./src
  5. Run pip install setuptools
  6. Run python setup.py install

License

MIT