# Blackstone & Shulker Blackstone is a programming language designed to help create plots on the MCDiamondFire Minecraft server. Shulker is a build tool that allows you to use the Blackstone programming language. Shulker also allows you to distribute your code publicly - whether you just want your game to be open-source or you want to make a library others can use. ## Community Links [Discord](https://discord.gg/c7qzkNAURV) [DF Website](https://mcdiamondfire.com) For ease of use with Blackstone, we recommend downloading the [Recode Mod](https://github.com/homchom/recode). ## Installation ### Building from Source You can install the compiler using the Cargo toolchain. ```text cargo install shulker ``` It will automatically handle building from source for you. ### Releases Page You can also install it through our `Releases` page on the sidebar. During official releases, we will compile binaries for Windows & Linux. ## Features ### Code Blocks - [x] Player Event - [x] Entity Event - [x] Player Action - [x] Entity Action - [x] Game Action - [x] If Player - [x] If Entity - [x] If Game - [ ] Set Variable - [ ] If Variable - [ ] Repeat - [x] Function - [x] Call Function - [x] Process - [x] Start Process - [ ] Else - [ ] Select Object - [ ] NOT Functionality ### Values - [x] Items (Vanilla, not customizable) - [x] Text - [x] Number - [x] Variable - [x] Location - [ ] Sound - [ ] Vector - [ ] Sound - [ ] Particle - [ ] Potion - [ ] Game Value ### Bonus / Planned Features - [ ] Function Parameters - [ ] Object-Oriented Programming - [ ] Compiler-Enforced Strong Typing - [ ] Tests - [ ] Customizable Items Note that none of the bonus features are *guaranteed* to be implemented. We do think they would be useful, though. ### Shulker / Compiler Commands - [x] version - [ ] init - [x] build (script) - [x] build-all - [x] build-stdout (script) - [ ] build_test - [ ] add (package) ### DFS Suggestions None yet! Let us know if there's some cool ones you'd like to see in our Discord! # Build Utilities Shulker will allow you to define your game & library in the `Shulker.toml` file. ## Shulker.toml For example, a `Shulker.toml` for a game would be: ```yaml [game] name = "Islands 2" id = 51025 ``` And for a library, an example one would be: ```yaml [library] name = "Entity Utilities" id = "entity_utilities" description = "This is a library used to make manipulating entities just better." creator = "Endistic" ``` ## Publishing & Creating Libraries `todo!()` ## Special Thanks `todo!()` ## Documentation All code must be inside an Event, Function, or Procedure. Here's some basic examples: ```rs playerEvent(Join) { //supports comments too! default.sendMessage("Hello world!"); } func FunnyFunction { // variables must be manually scoped - local, game, or save var game.joke = "Among us"; // defaults to local var list = ["a", "b", "c"]; // default.sendMessage(...) == print(...) default.sendMessage(joke); } ```