Create: Logic
Safe scripting language for Create automation, instead of redstone.
Quick challenge
How far can you run before the mobs catch you?
Minecraft check
Confirm your run
Complete the quick check to get your code.
Create: Logic
A create automation with using own programming language, naming "Metal". Place a computer, right click, enter code, press save, shift+right click for toggle run.
Coding: Declare 2 Systems (System is just like function), "INIT" and "TICK" like that:
SYSTEM(INIT): START;
init code here
END_SYSTEM;
SYSTEM(TICK): START;
tick (loop) code here
END_SYSTEM;
API: There is some functions to work with Metal.
built-in functions:
MAKE_VAR(VAR_TYPE,$name,start_value); - making a global variable (global variable MUST start with '$', ONLY in INIT)
MAKE_ITEM_VAR($name,item_id); - making a INT variable by minecraft item number id (ONLY in INIT)
SET($name,value); - set new value for variable
ADD/SUB/MUL/DIV($name,value); - operations with variables
WAIT(ms); - delaying script (ONLY in TICK)
CONTINUE(); - return to the current System begin (ONLY in TICK)
RERUN(); - return to the main System of current script (ONLY in TICK)
EXIT_STACK(); - exit entire stack of System calls and returns to the point of stack start
RETURN(); - exit 1 System of stack of System calls
ABORT(); - forcibly terminate current script (Doesn't turn off computer)
CALL_SYSTEM(name, args...); - call System (max stack size is 16), cannot call Systems-EntryPoints (INIT, TICK), args is ONLY in in 0.0.3+ mod version
IF(condition): START; - Base IF operator (closing - "END_IF;")
ELSE(): START; - Base ELSE operator (between IF and END_IF)
BIND_ARGS_TO_SYSTEM(name, args...); ONLY in INIT, args must be like "#var:INT", setting arguments to system call (CALL_SYSTEM), ONLY in 0.0.3+ mod version
MAKE_LOCAL_VAR(VAR_TYPE,#name,start_value); - making a local variable (local variable MUST start with '#') ONLY in 0.0.3+ mod version
ACCEPT_INVOKES(); - allow invoke non-reserved systems by integrations ONLY in INIT, for 0.0.4+ mod version
PRINT(args...); - INFO Output (white) ONLY in 0.0.6+ mod version
WARN(args...); - WARN Output (yellow) ONLY in 0.0.6+ mod version
ERROR(args...); - ERROR Output (red) ONLY in 0.0.6+ mod version
end of built-in functions
Java Functions (registered outside of a Metal):
CONNECT_LINK_SENDER(id,item1,item2); - making a transmitter connection (for two last arguments recommends use MAKE_ITEM_VAR, id is any value, doesn't used before), ONLY in INIT
CONNECT_LINK_RECEIVER(id,item1,item2); - making a receiver connection (use MAKE_ITEM_VAR variables for two last arguments) ONLY in INIT
SEND_LINK(id,power); - send power to Create Redstone Link (use with id, used in CONNECT_LINK_SENDER)
RECEIVE_LINK(id); - receive power from Create Redstone Link (use with id, used in CONNECT_LINK_RECEIVER)
RANDOM(min,max); - returns random INT between min and max
RAND(); - returns random DOUBLE between 0.0 - 1.0
SIN(value); - returns sin of the value (use radians)
COS(value); - returns cos of the value (use radians)
TAN(value); - returns tan of the value (use radians)
SQRT(value); - returns sqrt of the value
DTR(value); - degrees to radians
RTD(value); - radians to degrees
GET_PI(); - returns PI
MIN(args...); - returns MIN of all arguments
MAX(args...); - returns MAX of all arguments
CLAMP(value,min,max); - returns limited value in range
ABS(value); - returns module of value
POW(value,pow); - returns exponentiation of the value
GET_OPS(); - returns completed operations of this script - 0.0.5+
end of Java Functions;
Tips:
ADD,SUB, etc using ONLY in modification of value for example:
ADD($x,1); = x += 1;
In brackets:
IF($x + 1 > $y): START;
code
END_IF;
And, ": START" is not necessarily, but recommended, you also can use
SYSTEM(INIT); ...
IF(condition); ...
etc.
Current variable types: INT, DOUBLE, POWER, BOOL.
TICK EntryPoint (System) running in the other thread 1000 times per second.
INTEGRATION: Since 0.0.4 you can call non-reserved systems from Computer Craft mod, its looks like: Metal: SYSTEM(INIT): START; ACCEPT_INVOKES(); BIND_ARGS_TO_SYSTEM(SUM,#first:DOUBLE,#second:DOUBLE); END_SYSTEM; SYSTEM(SUM): START; RETURN(#first + #second); END_SYSTEM; SYSTEM(TICK): START;
END_SYSTEM;
CC Lua: local metal = peripheral.find("metal"); if metal then print(metal.callSystem("SUM",5,10)); -- output: 15 else print("Cannot find Metal Computer"); end
Since 0.0.5 you can use SYSTEM(NAME,args...): START; instead of BIND_ARGS_TO_SYSTEM
example:
SYSTEM(SET_POWER,#f:POWER,#s:POWER): START;
SEND_LINK(1,#f);
SEND_LINK(2,#s);
END_SYSTEM;
"**" instead of "POW(val,pow);" "%" operator
Since 0.0.6, in output functions you can use literals, just like that:
PRINT(~Hello World);
>> Hello World
or, with variable:
MAKE_VAR(INT,$test,150);
PRINT(~counter: ,$test);
>> counter: 150