很多年前的项目,谷坛技术区没有文章,放一些水代码。
代码比较多,完整代码在 https://gitee.com/albert_zhong/blox (是github的镜像)
定义块样式的代码 block-box3.js
`// by Albert Z
Blockly.Blocks['b3_color_rgb'] = {
init: function () {
this.appendDummyInput()
.appendField("RGB颜色 ")
.appendField("红:")
.appendField(new Blockly.FieldNumber(0, 0, 1), "R")
.appendField("绿:")
.appendField(new Blockly.FieldNumber(0, 0, 1), "G")
.appendField("蓝:")
.appendField(new Blockly.FieldNumber(0, 0, 1), "B");
this.setColour(10);
this.setOutput(true, null);
this.setTooltip("");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3_color_rgba'] = {
init: function () {
this.appendDummyInput()
.appendField("RGBA颜色 ")
.appendField("红:")
.appendField(new Blockly.FieldNumber(0, 0, 1), "R")
.appendField("绿:")
.appendField(new Blockly.FieldNumber(0, 0, 1), "G")
.appendField("蓝:")
.appendField(new Blockly.FieldNumber(0, 0, 1), "B")
.appendField("透明度:")
.appendField(new Blockly.FieldNumber(0, 0, 1), "A");
this.setColour(10);
this.setOutput(true, null);
this.setTooltip("");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3_vector_3'] = {
init: function () {
this.appendDummyInput()
.appendField("三维向量 ")
.appendField("x:")
.appendField(new Blockly.FieldNumber(0, 0, 1), "X")
.appendField("y:")
.appendField(new Blockly.FieldNumber(0, 0, 1), "Y")
.appendField("z:")
.appendField(new Blockly.FieldNumber(0, 0, 1), "Z");
this.setColour(10);
this.setOutput(true, null);
this.setTooltip("");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3_async'] = {
init: function () {
this.appendDummyInput()
.appendField("同步执行");
this.appendStatementInput("CODE")
.setCheck(null);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(10);
this.setTooltip("");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3_sleep'] = {
init: function () {
this.appendValueInput("TIME")
.setCheck("Number")
.appendField("等待");
this.appendDummyInput()
.appendField("秒");
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(10);
this.setTooltip("");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3_run'] = {
init: function () {
this.appendValueInput("CODE")
.appendField("运行");
this.setInputsInline(false);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(10);
this.setTooltip("");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3_junk'] = {
init: function () {
this.appendValueInput("CODE")
.appendField("丢弃");
this.setInputsInline(false);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(10);
this.setTooltip("");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3world_project_name'] = {
init: function () {
this.appendDummyInput()
.appendField("项目名称");
this.setOutput(true, 'String');
this.setColour(120);
this.setTooltip("");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3world_current_tick'] = {
init: function () {
this.appendDummyInput()
.appendField("计时器数值");
this.setOutput(true, 'Number');
this.setColour(120);
this.setTooltip("");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3world_say'] = {
init: function () {
this.appendValueInput("TEXT")
.setCheck("String")
.appendField("广播");
this.setInputsInline(false);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(120);
this.setTooltip("");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3event_arg'] = {
init: function () {
this.appendDummyInput()
.appendField("事件参数:")
.appendField(new Blockly.FieldTextInput("tick"), "NAME");
this.setOutput(true, null);
this.setColour(0);
this.setTooltip("");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3event_world'] = {
init: function () {
this.appendDummyInput()
.appendField("当 世界 触发")
.appendField(new Blockly.FieldDropdown([["时间循环", "TICK"], ["玩家聊天", "CHAT"], ["玩家加入", "JOIN"], ["玩家离开", "LEAVE"], ["按下按键", "PRESS"], ["松开按键", "RELEASE"], ["点击实体", "CLICKE"], ["实体创建", "CREATE"], ["玩家造成伤害", "DAMAGE"], ["玩家死亡", "DIE"], ['发生互动', 'INTERACT']]), "NAME")
.appendField("事件");
this.appendStatementInput("FUNC")
.setCheck(null)
.appendField("执行");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(0);
this.setTooltip("");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3event_entity'] = {
init: function () {
this.appendDummyInput()
.appendField("当 实体 ")
.appendField(new Blockly.FieldTextInput("entity"), "ENTITY")
.appendField("触发")
.appendField(new Blockly.FieldDropdown([["点击事件", "CLICK"], ["触碰实体", "ECONTACT"], ["停止触碰实体", "ESEPARATE"], ["进入液体", "FENTER"], ["离开液体", "FLEAVE"], ["进行互动", "INTERACT"], ["触碰方块", "VCONTACT"], ["停止触碰方块", "CSEPARATE"]]), "NAME")
.appendField("事件")
this.appendStatementInput("FUNC")
.setCheck(null)
.appendField("执行");
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(0);
this.setTooltip("");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3world_create_entity'] = {
init: function () {
this.appendValueInput("CONFIG")
.setCheck("String")
.appendField("创建实体 参数:");
this.setOutput(true, null);
this.setColour(120);
this.setTooltip("填写参数");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3world_add_zone'] = {
init: function () {
this.appendValueInput("CONFIG")
.setCheck("String")
.appendField("添加区域 参数:");
this.setOutput(true, null);
this.setColour(120);
this.setTooltip("填写参数");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3world_remove_zone'] = {
init: function () {
this.appendValueInput("CONFIG")
.setCheck("String")
.appendField("删除区域 参数:");
this.setOutput(true, null);
this.setColour(120);
this.setTooltip("填写参数");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3world_query'] = {
init: function () {
this.appendValueInput("CONFIG")
.setCheck("String")
.appendField("搜索实体 条件:");
this.setOutput(true, null);
this.setColour(120);
this.setTooltip("填写参数");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3world_query_all'] = {
init: function () {
this.appendValueInput("CONFIG")
.setCheck("String")
.appendField("搜索所有实体 条件:");
this.setOutput(true, null);
this.setColour(120);
this.setTooltip("填写参数");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3world_sound'] = {
init: function () {
this.appendValueInput("NAME")
.setCheck("String")
.appendField("播放声音");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(120);
this.setTooltip("填写参数");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3world_weather'] = {
init: function () {
this.appendDummyInput()
.appendField("设置天气为")
.appendField(new Blockly.FieldDropdown([["雨", "RAIN"], ["雾", "FOG"], ["雪", "SNOW"]]), "WEATHER");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(120);
this.setTooltip("填写参数");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3voxels_shape'] = {
init: function () {
this.appendValueInput("CONFIG")
.setCheck("String")
.appendField("设置地图大小");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(150);
this.setTooltip("填写参数");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3voxels_set'] = {
init: function () {
this.appendDummyInput()
.appendField("放置方块")
.appendField(new Blockly.FieldTextInput("名称或id"), "NAME")
.appendField("在")
.appendField(new Blockly.FieldTextInput("X坐标"), "X")
.appendField(new Blockly.FieldTextInput("Y坐标"), "Y")
.appendField(new Blockly.FieldTextInput("Z坐标"), "Z")
.appendField("面向")
.appendField(new Blockly.FieldDropdown([["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"]]), "ROTATION");
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(150);
this.setTooltip("填写参数");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3voxels_get'] = {
init: function () {
this.appendDummyInput()
.appendField("获取方块")
.appendField(new Blockly.FieldTextInput("X坐标"), "X")
.appendField(new Blockly.FieldTextInput("Y坐标"), "Y")
.appendField(new Blockly.FieldTextInput("Z坐标"), "Z");
this.setInputsInline(true);
this.setOutput(true, null);
this.setColour(150);
this.setTooltip("填写参数");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3entity_get'] = {
init: function () {
this.appendValueInput("NAME")
.setCheck(null)
.appendField("从实体");
this.appendDummyInput()
.appendField("获取")
.appendField(new Blockly.FieldDropdown([["玩家", "PLAYER"]]), "OBJ");
this.setInputsInline(true);
this.setOutput(true, null);
this.setColour(30);
this.setTooltip("");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3entity_mesh'] = {
init: function () {
this.appendValueInput("NAME")
.setCheck(null)
.appendField("设置实体");
this.appendValueInput("VALUE")
.setCheck(null)
.appendField("形状");
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(30);
this.setTooltip("");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3entity_pos'] = {
init: function () {
this.appendValueInput("NAME")
.setCheck(null)
.appendField("设置实体");
this.appendDummyInput()
.appendField('位置:')
.appendField(new Blockly.FieldTextInput("X坐标"), "X")
.appendField(new Blockly.FieldTextInput("Y坐标"), "Y")
.appendField(new Blockly.FieldTextInput("Z坐标"), "Z");
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(30);
this.setTooltip("填写参数");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3entity_say'] = {
init: function () {
this.appendValueInput("NAME")
.setCheck(null)
.appendField("实体");
this.appendValueInput("TEXT")
.setCheck(null)
.appendField("发言");
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(30);
this.setTooltip("");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3entity_enableInteract'] = {
init: function () {
this.appendValueInput('NAME')
.appendField(new Blockly.FieldDropdown([["允许", "true"], ["禁止", "false"]]), "ABLE")
.appendField("实体");
this.appendDummyInput()
.appendField("互动");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(30);
this.setTooltip("");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3entity_text'] = {
init: function () {
this.appendValueInput("NAME")
.setCheck(null)
.appendField("设置实体");
this.appendValueInput('TEXT')
.setCheck(null)
.appendField('互动提示文本');
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(30);
this.setTooltip("");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3entity_destroy'] = {
init: function () {
this.appendValueInput('NAME')
.appendField("销毁实体");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(30);
this.setTooltip("");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3player_name'] = {
init: function () {
this.appendValueInput("NAME")
.setCheck(null)
.appendField("玩家");
this.appendDummyInput()
.appendField("用户名");
this.setInputsInline(true);
this.setOutput(true, null);
this.setColour(190);
this.setTooltip("");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3player_id'] = {
init: function () {
this.appendValueInput("NAME")
.setCheck(null)
.appendField("玩家");
this.appendDummyInput()
.appendField("ID");
this.setOutput(true, null);
this.setColour(190);
this.setTooltip("");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3player_key'] = {
init: function () {
this.appendValueInput("NAME")
.setCheck(null)
.appendField("玩家");
this.appendDummyInput()
.appendField("标识码");
this.setOutput(true, null);
this.setColour(190);
this.setTooltip("");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3player_sp'] = {
init: function () {
this.appendValueInput("NAME")
.setCheck(null)
.appendField("设置玩家");
this.appendDummyInput()
.appendField("出生地点")
.appendField(new Blockly.FieldTextInput("X坐标"), "X")
.appendField(new Blockly.FieldTextInput("Y坐标"), "Y")
.appendField(new Blockly.FieldTextInput("Z坐标"), "Z");
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(190);
this.setTooltip("填写参数");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3player_send'] = {
init: function () {
this.appendValueInput("NAME")
.setCheck(null)
.appendField("向玩家");
this.appendValueInput("TEXT")
.setCheck(null)
.appendField("发送私信");
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(190);
this.setTooltip("");
this.setHelpUrl("");
}
};
Blockly.Blocks['b3player_fly'] = {
init: function () {
this.appendValueInput('NAME')
.appendField(new Blockly.FieldDropdown([["允许", "true"], ["禁止", "false"]]), "ABLE")
.setCheck(null)
.appendField("玩家");
this.appendDummyInput()
.appendField("飞行");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(190);
this.setTooltip("");
this.setHelpUrl("");
}
};`
定义js转译的代码 javascript-compressed.js
`// Blox 新增
Blockly.JavaScript['debug_out'] = function (block) {
var text = Blockly.JavaScript.valueToCode(block, 'TEXT', Blockly.JavaScript.ORDER_ATOMIC);
var code = 'console.log(' + text + ');\n';
return code;
};
Blockly.JavaScript['debug_warn'] = function (block) {
var text = Blockly.JavaScript.valueToCode(block, 'TEXT', Blockly.JavaScript.ORDER_ATOMIC);
var code = 'console.warn(' + text + ');\n';
return code;
};
Blockly.JavaScript['debug_error'] = function (block) {
var text = Blockly.JavaScript.valueToCode(block, 'TEXT', Blockly.JavaScript.ORDER_ATOMIC);
var code = 'console.error(' + text + ');\n';
return code;
};
Blockly.JavaScript['debug_clear'] = function (block) {
var code = 'console.clear();\n';
return code;
};
Blockly.JavaScript['debug_comment'] = function (block) {
var text = Blockly.JavaScript.valueToCode(block, 'TEXT', Blockly.JavaScript.ORDER_ATOMIC);
var code = '// ' + text.substring(1, text.length-1) + '\n';
return code;
};
Blockly.JavaScript['debug_t'] = function (block) {
var code = 'console.time();\n';
return code;
};
Blockly.JavaScript['debug_te'] = function (block) {
var text = Blockly.JavaScript.valueToCode(block, 'TEXT', Blockly.JavaScript.ORDER_ATOMIC);
var code = 'console.timeEnd();\n';
return code;
};
Blockly.JavaScript['b3_color_rgb'] = function (block) {
var r = block.getFieldValue('R');
var g = block.getFieldValue('G');
var b = block.getFieldValue('B');
// TODO: Assemble JavaScript into code variable.
var code = 'new Box3RGBColor(' + r +',' + g + ',' + b + ')';
return [code, Blockly.JavaScript.ORDER_NONE];
};
Blockly.JavaScript['b3_color_rgba'] = function (block) {
var r = block.getFieldValue('R');
var g = block.getFieldValue('G');
var b = block.getFieldValue('B');
var a = block.getFieldValue('A');
// TODO: Assemble JavaScript into code variable.
var code = 'new Box3RGBAColor(' + r + ',' + g + ',' + b + ', ' + a + ')';
return [code, Blockly.JavaScript.ORDER_NONE];
};
Blockly.JavaScript['b3_vector_3'] = function (block) {
var x = block.getFieldValue('X');
var y = block.getFieldValue('Y');
var z = block.getFieldValue('Z');
// TODO: Assemble JavaScript into code variable.
var code = 'new Box3Vector3(' + x + ',' + y + ',' + z + ')';
return [code, Blockly.JavaScript.ORDER_NONE];
};
Blockly.JavaScript['b3_async'] = function (block) {
var scode = Blockly.JavaScript.statementToCode(block, 'CODE');
var code = '(async function () { \n' + scode + '})();\n';
return code;
};
Blockly.JavaScript['b3_sleep'] = function (block) {
var time = Blockly.JavaScript.valueToCode(block, 'TIME', Blockly.JavaScript.ORDER_ATOMIC);
// TODO: Assemble JavaScript into code variable.
var code = 'await sleep(' + (Number(time) *1000) + ');\n';
return code;
};
Blockly.JavaScript['b3_run'] = function (block) {
var code = Blockly.JavaScript.valueToCode(block, 'CODE', Blockly.JavaScript.ORDER_ATOMIC);
code = eval(code) + '\n';
return code;
};
Blockly.JavaScript['b3_junk'] = function (block) {
var code = Blockly.JavaScript.valueToCode(block, 'CODE', Blockly.JavaScript.ORDER_ATOMIC);
code = code + ';\n';
return code;
};
// WORLD
Blockly.JavaScript['b3world_project_name'] = function (block) {
var code = 'world.projectName';
return [code, Blockly.JavaScript.ORDER_NONE];
};
Blockly.JavaScript['b3world_current_tick'] = function (block) {
var code = 'world.currentTick';
return [code, Blockly.JavaScript.ORDER_NONE];
};
Blockly.JavaScript['b3world_say'] = function (block) {
var text = Blockly.JavaScript.valueToCode(block, 'TEXT', Blockly.JavaScript.ORDER_ATOMIC);
var code = 'world.say(' + text + ');\n';
return code;
};
Blockly.JavaScript['b3event_arg'] = function (block) {
var name = block.getFieldValue('NAME');
var code = name;
return [code, Blockly.JavaScript.ORDER_NONE];
};
Blockly.JavaScript['b3event_world'] = function (block) {
var name = block.getFieldValue('NAME');
var func = Blockly.JavaScript.statementToCode(block, 'FUNC');
var events = {
TICK: 'world.onTick(({ tick, prevTick, elapsedTimeMS, skip })',
CHAT: 'world.onChat(({ entity, message, tick })',
JOIN: 'world.onPlayerJoin(({ entity, tick })',
LEAVE: 'world.onPlayerLeave(({ entity, tick })',
PRESS: 'world.onPress(({ button, entity, position, pressed, raycast, tick })',
RELEASE: 'world.onRelease(({ button, entity, position, pressed, raycast, tick })',
CLICK: 'world.onClick(({ entity, clicker, button, distance, clickerPosition, raycast, tick })',
CREATE: 'world.onEntityCreate(({ entity, tick })',
DAMAGE: 'world.onTakeDamage(({ entity, attacker, damage, damageType, tick })',
DIE: 'world.onDie(({ entity, attacker, damageType, tick })',
INTERACT: 'world.onInteract(({ entity, targetEntity, tick })'
};
var event = events[name];
var code = event + ' => {\n' + func + '});\n';
return code;
};
Blockly.JavaScript['b3event_entity'] = function (block) {
var ett = block.getFieldValue('ENTITY');
var name = block.getFieldValue('NAME');
var func = Blockly.JavaScript.statementToCode(block, 'FUNC');
var events = {
CLICK: '.onClick(({ tick })',
ECONTACT: '.onEntityContact(({ entity, tick })',
ESEPARATE: '.onEntitySeparate(({ entity, tick })',
FENTER: '.onFluidEnter(({ entity, tick })',
FLEAVE: '.onFluidLeave(({ entity, tick })',
INTERACT: '.onInteract(({ entity, tick })',
VCONTACT: '.onVoxelContact(({ entity, tick })',
VSEPARATE: '.onVoxelSeparate(({ entity, tick })',
};
var event = events[name];
var code = ett + event + ' => {\n' + func + '});\n';
return code;
};
Blockly.JavaScript['b3world_create_entity'] = function (block) {
var config = Blockly.JavaScript.valueToCode(block, 'CONFIG', Blockly.JavaScript.ORDER_ATOMIC);
var code = 'world.createEntity(' + eval(config) + ')';
return [code, Blockly.JavaScript.ORDER_NONE];
};
Blockly.JavaScript['b3world_add_zone'] = function (block) {
var config = Blockly.JavaScript.valueToCode(block, 'CONFIG', Blockly.JavaScript.ORDER_ATOMIC);
var code = 'world.addZone(' + eval(config) + ')';
return [code, Blockly.JavaScript.ORDER_NONE];
};
Blockly.JavaScript['b3world_remove_zone'] = function (block) {
var config = Blockly.JavaScript.valueToCode(block, 'CONFIG', Blockly.JavaScript.ORDER_ATOMIC);
var code = 'world.removeZone(' + eval(config) + ')';
return [code, Blockly.JavaScript.ORDER_NONE];
};
Blockly.JavaScript['b3world_query'] = function (block) {
var config = Blockly.JavaScript.valueToCode(block, 'CONFIG', Blockly.JavaScript.ORDER_ATOMIC);
var code = 'world.querySelector(' + eval(config) + ')';
return [code, Blockly.JavaScript.ORDER_NONE];
};
Blockly.JavaScript['b3world_query_all'] = function (block) {
var config = Blockly.JavaScript.valueToCode(block, 'CONFIG', Blockly.JavaScript.ORDER_ATOMIC);
var code = 'world.querySelectorAll(' + eval(config) + ')';
return [code, Blockly.JavaScript.ORDER_NONE];
};
Blockly.JavaScript['b3world_sound'] = function (block) {
var name = Blockly.JavaScript.valueToCode(block, 'NAME', Blockly.JavaScript.ORDER_ATOMIC);
var code = 'world.sound(' + name + ');\n';
return code;
};
Blockly.JavaScript['b3world_weather'] = function (block) {
var weather = block.getFieldValue('WEATHER');
switch (weather) {
case 'RAIN':
var code = 'world.rainDensity = 0.25;\nworld.rainDirection = new Box3Vector3(0, -1, 0);\nworld.rainColor = new Box3RGBAColor(1, 1, 1, 0.4);\nworld.rainSpeed = 0.15;\nworld.rainSizeLo = 0.01;\nworld.rainSizeHi = 0.03;\nworld.rainInterference = 0.1;\n';
case 'FOG':
var code = 'world.maxFog = 0.8;\nworld.fogColor = new Box3RGBColor(1, 1, 1);\nworld.fogHeightOffset = -0.5;\nworld.fogStartDistance = 6;\nworld.fogUniformDensity = 0.5;\nworld.fogHeightFalloff = 0.4;\n';
case 'SNOW':
var code = 'world.snowDensity = 0.4;\nworld.snowFallSpeed = 0.2;\nworld.snowSizeLo = 0.2;\nworld.snowSizeHi = 0.35;\nworld.snowColor = new Box3RGBAColor(0.99, 0.99, 0.99, 0.99);\n';
}
return code;
};
Blockly.JavaScript['b3voxels_shape'] = function (block) {
var config = Blockly.JavaScript.valueToCode(block, 'CONFIG', Blockly.JavaScript.ORDER_ATOMIC);
var code = 'voxels.shape = ' + eval(config) + ';\n';
return code;
};
Blockly.JavaScript['b3voxels_set'] = function (block) {
var name = block.getFieldValue('NAME');
var x = Number(block.getFieldValue('X'));
var y = Number(block.getFieldValue('Y'));
var z = Number(block.getFieldValue('Z'));
var rotation = block.getFieldValue('ROTATION');
var code = 'voxels.setVoxel(' + x + ', ' + y + ', ' + z + ', ' + name + ', ' + rotation + ');\n';
return code;
};
Blockly.JavaScript['b3voxels_get'] = function (block) {
var x = Number(block.getFieldValue('X'));
var y = Number(block.getFieldValue('Y'));
var z = Number(block.getFieldValue('Z'));
var code = 'voxels.getVoxel(' + x + ', ' + y + ', ' + z + ');\n';
return code;
};
Blockly.JavaScript['b3entity_get'] = function (block) {
var name = Blockly.JavaScript.valueToCode(block, 'NAME', Blockly.JavaScript.ORDER_ATOMIC);
var obj = block.getFieldValue('OBJ');
var objs = {PLAYER: 'player'}
try {
var code = eval(name) + '.' + objs[obj];
} catch (err) {
var code = name + '.' + objs[obj];
}
return [code, Blockly.JavaScript.ORDER_NONE];
};
Blockly.JavaScript['b3entity_mesh'] = function (block) {
var name = Blockly.JavaScript.valueToCode(block, 'NAME', Blockly.JavaScript.ORDER_ATOMIC);
var value = Blockly.JavaScript.valueToCode(block, 'VALUE', Blockly.JavaScript.ORDER_ATOMIC);
try {
var code = eval(name) + '.mesh = ' + value + ';\n';
} catch (err) {
var code = name + '.mesh = ' + value + ';\n';
}
return code;
};
Blockly.JavaScript['b3entity_pos'] = function (block) {
var name = Blockly.JavaScript.valueToCode(block, 'NAME', Blockly.JavaScript.ORDER_ATOMIC);
var x = Number(block.getFieldValue('X'));
var y = Number(block.getFieldValue('Y'));
var z = Number(block.getFieldValue('Z'));
try {
var code = eval(name) + '.position = Box3Vector3(' + x + ', ' + y + ', ' + z + ');\n';
} catch (err) {
var code = name + '.position = Box3Vector3(' + x + ', ' + y + ', ' + z + ');\n';
}
return code;
};
Blockly.JavaScript['b3entity_say'] = function (block) {
var name = Blockly.JavaScript.valueToCode(block, 'NAME', Blockly.JavaScript.ORDER_ATOMIC);
var text = Blockly.JavaScript.valueToCode(block, 'TEXT', Blockly.JavaScript.ORDER_ATOMIC);
try {
var code = eval(name) + '.say(' + text + ');\n';
} catch (err) {
var code = name + '.say(' + text + ');\n';
}
return code;
};
Blockly.JavaScript['b3entity_enableInteract'] = function (block) {
var name = Blockly.JavaScript.valueToCode(block, 'NAME', Blockly.JavaScript.ORDER_ATOMIC);
var able = eval(block.getFieldValue('ABLE'));
try {
var code = eval(name) + '.enableInteract = ' + able + ';\n';
} catch (err) {
var code = name + '.enableInteract = ' + able + ';\n';
}
return code;
};
Blockly.JavaScript['b3entity_text'] = function (block) {
var name = Blockly.JavaScript.valueToCode(block, 'NAME', Blockly.JavaScript.ORDER_ATOMIC);
var text = Blockly.JavaScript.valueToCode(block, 'TEXT', Blockly.JavaScript.ORDER_ATOMIC);
try {
var code = eval(name) + '.interactHint = ' + text + ';\n';
} catch (err) {
var code = name + '.interactHint = ' + text + ';\n';
}
return code;
};
Blockly.JavaScript['b3entity_destroy'] = function (block) {
var name = Blockly.JavaScript.valueToCode(block, 'NAME', Blockly.JavaScript.ORDER_ATOMIC);
var text = Blockly.JavaScript.valueToCode(block, 'TEXT', Blockly.JavaScript.ORDER_ATOMIC);
try {
var code = eval(name) + '.destroy();\n';
} catch (err) {
var code = name + '.destroy();\n';
}
return code;
};
Blockly.JavaScript['b3player_name'] = function (block) {
var name = Blockly.JavaScript.valueToCode(block, 'NAME', Blockly.JavaScript.ORDER_ATOMIC);
try {
var code = eval(name) + '.name';
} catch (err) {
var code = name + '.name';
}
return [code, Blockly.JavaScript.ORDER_NONE];
};
Blockly.JavaScript['b3player_id'] = function (block) {
var name = Blockly.JavaScript.valueToCode(block, 'NAME', Blockly.JavaScript.ORDER_ATOMIC);
try {
var code = eval(name) + '.boxId';
} catch (err) {
var code = name + '.boxId';
}
return [code, Blockly.JavaScript.ORDER_NONE];
};
Blockly.JavaScript['b3player_key'] = function (block) {
var name = Blockly.JavaScript.valueToCode(block, 'NAME', Blockly.JavaScript.ORDER_ATOMIC);
try {
var code = eval(name) + '.userKey';
} catch (err) {
var code = name + '.userKey';
}
return [code, Blockly.JavaScript.ORDER_NONE];
};
Blockly.JavaScript['b3player_sp'] = function (block) {
var name = Blockly.JavaScript.valueToCode(block, 'NAME', Blockly.JavaScript.ORDER_ATOMIC);
var x = Number(block.getFieldValue('X'));
var y = Number(block.getFieldValue('Y'));
var z = Number(block.getFieldValue('Z'));
try {
var code = eval(name) + '.spawnPoint = Box3Vector3(' + x + ', ' + y + ', ' + z + ');\n';
} catch (err) {
var code = name + '.spawnPoint = Box3Vector3(' + x + ', ' + y + ', ' + z + ');\n';
}
return code;
};
Blockly.JavaScript['b3player_send'] = function (block) {
var name = Blockly.JavaScript.valueToCode(block, 'NAME', Blockly.JavaScript.ORDER_ATOMIC);
var text = Blockly.JavaScript.valueToCode(block, 'TEXT', Blockly.JavaScript.ORDER_ATOMIC);
try {
var code = eval(name) + '.directMessage(' + able + ');\n';
} catch (err) {
var code = name + '.directMessage(' + able + ');\n';
}
return code;
};
Blockly.JavaScript['b3player_fly'] = function (block) {
var name = Blockly.JavaScript.valueToCode(block, 'NAME', Blockly.JavaScript.ORDER_ATOMIC);
var able = eval(block.getFieldValue('ABLE'));
try {
var code = eval(name) + '.canFly = ' + able + ';\n';
} catch (err) {
var code = name + '.canFly = ' + able + ';\n';
}
return code;
};`