Skip to content

Commit

Permalink
make handlers use a custom code gen system
Browse files Browse the repository at this point in the history
  • Loading branch information
ZXMushroom63 committed Dec 8, 2024
1 parent ce05ac8 commit 7b38487
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 32 deletions.
67 changes: 37 additions & 30 deletions blocks/Blocks.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
const handle_BlockConstructor = {
init: function() {
init: function () {
this.appendDummyInput('ID')
.appendField('Handler ID:')
.appendField(new Blockly.FieldTextInput('block constructor 1'), 'ID');
this.appendStatementInput('CODE')
.setAlign(Blockly.inputs.Align.CENTRE)
this.appendDummyInput('')
.setAlign(Blockly.inputs.Align.LEFT)
.appendField('Block Constructor Handler');
this.appendStatementInput('CODE');
this.setTooltip('');
this.setHelpUrl('');
this.setColour(0);
Expand All @@ -15,23 +16,23 @@ Blockly.common.defineBlocks({ handle_BlockConstructor: handle_BlockConstructor }

javascript.javascriptGenerator.forBlock['handle_BlockConstructor'] = function (block) {
const statement = javascript.javascriptGenerator.statementToCode(this, 'CODE');
return statement;
return {code: statement, args: []};
}


const blocks_blockproperty = {
init: function() {
init: function () {
this.appendDummyInput('PROPERTY')
.appendField('set block')
.appendField(new Blockly.FieldDropdown([
['slipperiness', 'slipperiness'],
['light opacity', 'lightOpacity'],
['light value', 'lightValue'],
['blast resistance', 'blockResistance'],
['hardness', 'blockHardness']
]), 'PROPERTY');
['slipperiness', 'slipperiness'],
['light opacity', 'lightOpacity'],
['light value', 'lightValue'],
['blast resistance', 'blockResistance'],
['hardness', 'blockHardness']
]), 'PROPERTY');
this.appendValueInput('VALUE')
.setCheck('Number')
.setCheck('Number')
.appendField('to');
this.setInputsInline(true)
this.setPreviousStatement(true, null);
Expand All @@ -41,8 +42,8 @@ const blocks_blockproperty = {
this.setColour(0);
}
};
Blockly.common.defineBlocks({blocks_blockproperty: blocks_blockproperty});
javascript.javascriptGenerator.forBlock['blocks_blockproperty'] = function() {
Blockly.common.defineBlocks({ blocks_blockproperty: blocks_blockproperty });
javascript.javascriptGenerator.forBlock['blocks_blockproperty'] = function () {
const dropdown_property = this.getFieldValue('PROPERTY');
const value_value = javascript.javascriptGenerator.valueToCode(this, 'VALUE', javascript.Order.ATOMIC);
const code = `this["$${dropdown_property}"] = ${value_value};`;
Expand All @@ -52,17 +53,17 @@ javascript.javascriptGenerator.forBlock['blocks_blockproperty'] = function() {


const blocks_blockswitch = {
init: function() {
init: function () {
this.appendDummyInput('PROPERTY')
.appendField('set block')
.appendField(new Blockly.FieldDropdown([
['full block', 'fullBlock'],
['translucent', 'translucent'],
['use neighbor brightness', 'useNeighborBrightness'],
['needs random tick', 'blockHardness']
]), 'PROPERTY');
['full block', 'fullBlock'],
['translucent', 'translucent'],
['use neighbor brightness', 'useNeighborBrightness'],
['needs random tick', 'blockHardness']
]), 'PROPERTY');
this.appendDummyInput('VALUE')
.setAlign(Blockly.inputs.Align.CENTRE)
.setAlign(Blockly.inputs.Align.CENTRE)
.appendField('to')
.appendField(new Blockly.FieldCheckbox('TRUE'), 'VALUE');
this.setInputsInline(true)
Expand All @@ -73,8 +74,8 @@ const blocks_blockswitch = {
this.setColour(0);
}
};
Blockly.common.defineBlocks({blocks_blockswitch: blocks_blockswitch});
javascript.javascriptGenerator.forBlock['blocks_blockswitch'] = function() {
Blockly.common.defineBlocks({ blocks_blockswitch: blocks_blockswitch });
javascript.javascriptGenerator.forBlock['blocks_blockswitch'] = function () {
const dropdown_property = this.getFieldValue('PROPERTY');
const checkbox_value = this.getFieldValue('VALUE') ? 1 : 0;
const code = `this["$${dropdown_property}"] = ${checkbox_value};`;
Expand All @@ -83,20 +84,26 @@ javascript.javascriptGenerator.forBlock['blocks_blockswitch'] = function() {


const handle_BlockBreak = {
init: function() {
init: function () {
this.appendDummyInput('ID')
.appendField('Handler ID:')
.appendField(new Blockly.FieldTextInput('block break 1'), 'ID');
this.appendStatementInput('CODE')
.appendField('Block Break Handler');
this.appendDummyInput('')
.appendField('Block Break Handler with:')
.appendField(new Blockly.FieldVariable('world'), 'WORLD')
.appendField(new Blockly.FieldVariable('position'), 'BLOCKPOS');
this.appendStatementInput('CODE');
this.setInputsInline(false)
this.setTooltip('');
this.setHelpUrl('');
this.setColour(0);
}
};
Blockly.common.defineBlocks({handle_BlockBreak: handle_BlockBreak});
javascript.javascriptGenerator.forBlock['handle_BlockBreak'] = function (block) {
Blockly.common.defineBlocks({ handle_BlockBreak: handle_BlockBreak });

javascript.javascriptGenerator.forBlock['handle_BlockBreak'] = function () {
const variable_world = javascript.javascriptGenerator.getVariableName(this.getFieldValue('WORLD'));
const variable_blockpos = javascript.javascriptGenerator.getVariableName(this.getFieldValue('BLOCKPOS'));
const statement = javascript.javascriptGenerator.statementToCode(this, 'CODE');
return statement;
}
return { code: statement, args: [variable_world, variable_blockpos, "$blockstate"] };
}
4 changes: 3 additions & 1 deletion index.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,9 @@ function getHandlerCode(type, tag) {
});
});
var variableCode = "var " + [...usedVariableSet].map(varId => { return javascript.javascriptGenerator.getVariableName(varId) }).join(",") + ";"
return variableCode + javascript.javascriptGenerator.blockToCode(handler);
var generatedCode = javascript.javascriptGenerator.forBlock[handler.type].apply(handler, []);
generatedCode.code = variableCode + generatedCode.code;
return generatedCode;
}
const supportedEvents = new Set([
Blockly.Events.BLOCK_CHANGE,
Expand Down
2 changes: 1 addition & 1 deletion primitives/AdvancedBlock.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ PRIMITIVES["block_advanced"] = {
var nmb_AdvancedBlock = function nmb_AdvancedBlock() {
blockSuper(this, ModAPI.materials.${this.tags.material}.getRef());
this.$defaultBlockState = this.$blockState.$getBaseState();
${constructorHandler}
${constructorHandler.code}
}
ModAPI.reflect.prototypeStack(blockClass, nmb_AdvancedBlock);
nmb_AdvancedBlock.prototype.$isOpaqueCube = function () {
Expand Down

0 comments on commit 7b38487

Please sign in to comment.