mirror of
https://github.com/unmojang/node-minecraft-protocol.git
synced 2025-09-29 06:03:33 -04:00
move condition type to conditional.js
This commit is contained in:
parent
fe04239090
commit
877ede063d
26
src/datatypes/conditional.js
Normal file
26
src/datatypes/conditional.js
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
var evalCondition= require("../utils").evalCondition;
|
||||||
|
|
||||||
|
module.exports= {
|
||||||
|
'condition': [readCondition, writeCondition, sizeOfCondition]
|
||||||
|
};
|
||||||
|
|
||||||
|
function readCondition(buffer,offset,typeArgs, rootNode)
|
||||||
|
{
|
||||||
|
if(!evalCondition(typeArgs,rootNode))
|
||||||
|
return { value: null, size: 0 };
|
||||||
|
return this.read(buffer, offset, { type: typeArgs.type, typeArgs:typeArgs.typeArgs }, rootNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
function writeCondition(value, buffer, offset, typeArgs, rootNode) {
|
||||||
|
if(!evalCondition(typeArgs,rootNode))
|
||||||
|
return offset;
|
||||||
|
|
||||||
|
return this.write(value, buffer, offset, { type: typeArgs.type, typeArgs:typeArgs.typeArgs }, rootNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
function sizeOfCondition(value, fieldInfo, rootNode) {
|
||||||
|
if(!evalCondition(fieldInfo,rootNode))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return this.sizeOf(value,fieldInfo, rootNode);
|
||||||
|
}
|
@ -2,7 +2,7 @@ var assert = require('assert');
|
|||||||
var util = require('util');
|
var util = require('util');
|
||||||
var zlib = require('zlib');
|
var zlib = require('zlib');
|
||||||
|
|
||||||
var getField= require("./utils").getField;
|
var evalCondition= require("./utils").evalCondition;
|
||||||
|
|
||||||
var STRING_MAX_LENGTH = 240;
|
var STRING_MAX_LENGTH = 240;
|
||||||
|
|
||||||
@ -54,6 +54,7 @@ var numeric=require("./datatypes/numeric");
|
|||||||
var utils=require("./datatypes/utils");
|
var utils=require("./datatypes/utils");
|
||||||
var minecraft=require("./datatypes/minecraft");
|
var minecraft=require("./datatypes/minecraft");
|
||||||
var structures=require("./datatypes/structures");
|
var structures=require("./datatypes/structures");
|
||||||
|
var conditional=require("./datatypes/conditional");
|
||||||
|
|
||||||
var types = {
|
var types = {
|
||||||
'byte': numeric.byte,
|
'byte': numeric.byte,
|
||||||
@ -72,7 +73,7 @@ var types = {
|
|||||||
'array':structures.array,
|
'array':structures.array,
|
||||||
'buffer': utils.buffer,
|
'buffer': utils.buffer,
|
||||||
'count': structures.count,
|
'count': structures.count,
|
||||||
'condition': [readCondition, writeCondition, sizeOfCondition],
|
'condition': conditional.condition,
|
||||||
// TODO : remove type-specific, replace with generic containers and arrays.
|
// TODO : remove type-specific, replace with generic containers and arrays.
|
||||||
'restBuffer': minecraft.restBuffer,
|
'restBuffer': minecraft.restBuffer,
|
||||||
'UUID': minecraft.UUID,
|
'UUID': minecraft.UUID,
|
||||||
@ -124,38 +125,6 @@ for (var n in entityMetadataTypes) {
|
|||||||
entityMetadataTypeBytes[entityMetadataTypes[n].type] = n;
|
entityMetadataTypeBytes[entityMetadataTypes[n].type] = n;
|
||||||
}
|
}
|
||||||
|
|
||||||
function readCondition(buffer,offset,typeArgs, rootNode)
|
|
||||||
{
|
|
||||||
if(!evalCondition(typeArgs,rootNode))
|
|
||||||
return { value: null, size: 0 };
|
|
||||||
return proto.read(buffer, offset, { type: typeArgs.type, typeArgs:typeArgs.typeArgs }, rootNode);
|
|
||||||
}
|
|
||||||
|
|
||||||
function writeCondition(value, buffer, offset, typeArgs, rootNode) {
|
|
||||||
if(!evalCondition(typeArgs,rootNode))
|
|
||||||
return offset;
|
|
||||||
|
|
||||||
return proto.write(value, buffer, offset, { type: typeArgs.type, typeArgs:typeArgs.typeArgs }, rootNode);
|
|
||||||
}
|
|
||||||
|
|
||||||
function sizeOfCondition(value, fieldInfo, rootNode) {
|
|
||||||
if(!evalCondition(fieldInfo,rootNode))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return proto.sizeOf(value,fieldInfo, rootNode);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function evalCondition(condition,field_values)
|
|
||||||
{
|
|
||||||
var field_value_to_test="this" in condition && condition["this"] ? field_values["this"][condition.field] : field_values[condition.field];
|
|
||||||
var b=condition.values.some(function(value) {return field_value_to_test===value;});
|
|
||||||
if("different" in condition && condition["different"])
|
|
||||||
return !b;
|
|
||||||
else
|
|
||||||
return b;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function readEntityMetadata(buffer, offset) {
|
function readEntityMetadata(buffer, offset) {
|
||||||
var cursor = offset;
|
var cursor = offset;
|
||||||
|
16
src/utils.js
16
src/utils.js
@ -1,4 +1,7 @@
|
|||||||
module.exports= {getField:getField};
|
module.exports={
|
||||||
|
getField:getField,
|
||||||
|
evalCondition:evalCondition
|
||||||
|
};
|
||||||
|
|
||||||
function getField(countField, rootNode) {
|
function getField(countField, rootNode) {
|
||||||
var countFieldArr = countField.split(".");
|
var countFieldArr = countField.split(".");
|
||||||
@ -8,3 +11,14 @@ function getField(countField, rootNode) {
|
|||||||
}
|
}
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function evalCondition(condition,field_values)
|
||||||
|
{
|
||||||
|
var field_value_to_test="this" in condition && condition["this"] ? field_values["this"][condition.field] : field_values[condition.field];
|
||||||
|
var b=condition.values.some(function(value) {return field_value_to_test===value;});
|
||||||
|
if("different" in condition && condition["different"])
|
||||||
|
return !b;
|
||||||
|
else
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user