Skip to content

Commit

Permalink
expose preNettyVersionsByProtocolVersion and postNettyVersionsByProto…
Browse files Browse the repository at this point in the history
…colVersion, use it for a better resolution of the "major" version (really the minecraft-data version), fixes #13, fixes #15
  • Loading branch information
rom1504 committed Jan 26, 2016
1 parent a85d05c commit 3ffbd2f
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 38 deletions.
8 changes: 8 additions & 0 deletions doc/api.md
Original file line number Diff line number Diff line change
Expand Up @@ -150,3 +150,11 @@ unindexed minecraft versions

minecraft versions indexed by minecraft version (example : 1.8.8)

### minecraft-data.preNettyVersionsByProtocolVersion

pre netty minecraft versions indexed by protocol version (example : 47)

### minecraft-data.postNettyVersionsByProtocolVersion

post netty minecraft versions indexed by protocol version (example : 47)

15 changes: 15 additions & 0 deletions example.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,18 @@ console.log(mcData.mobs[62]);
console.log(mcData.objects[62]);

console.log(require("minecraft-data").versionsByMinecraftVersion["1.8.8"]);

console.log(require("minecraft-data").versionsByMinecraftVersion["15w40b"]);


console.log(require("minecraft-data").preNettyVersionsByProtocolVersion[47]);

console.log(require("minecraft-data").postNettyVersionsByProtocolVersion[47][0]);


console.log(require("minecraft-data")(47).version);

console.log(require("minecraft-data")("1.8").version);


console.log(require("minecraft-data")("15w40b").version);
50 changes: 37 additions & 13 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,19 +1,45 @@
var loader=require("./lib/loader");
var mcDataToNode=require("./lib/loader");
var indexer=require("./lib/indexer.js");
var protocolVersions=require('./minecraft-data/data/common/protocolVersions');
var versionsByMinecraftVersion=indexer.buildIndexFromArray(protocolVersions,"minecraftVersion");
var preNettyVersionsByProtocolVersion=indexer.buildIndexFromArrayNonUnique(protocolVersions.filter(function(e){return !e.usesNetty}),"version");
var postNettyVersionsByProtocolVersion=indexer.buildIndexFromArrayNonUnique(protocolVersions.filter(function(e){return e.usesNetty}),"version");

var cache={}; // prevent reindexing when requiring multiple time the same version

module.exports = function(version)
module.exports = function(mcVersion,preNetty)
{
return loader(version,mcVersionToMcData);
preNetty=preNetty || false;
var majorVersion=toMajor(mcVersion,preNetty);
if(majorVersion==null)
return null;
if(cache[majorVersion])
return cache[majorVersion];
var mcData=data[majorVersion];
if(mcData==null)
return null;
var nmcData=mcDataToNode(mcData);
cache[majorVersion]=nmcData;
return nmcData;
};

var indexer=require("./lib/indexer.js");
module.exports.versions=require('./minecraft-data/data/common/protocolVersions');
module.exports.versionsByMinecraftVersion=indexer.buildIndexFromArray(module.exports.versions,"minecraftVersion");

function mcVersionToMcData(mcVersion)
function toMajor(mcVersion,preNetty)
{
return data[mcVersion];
if(data[mcVersion])
return mcVersion;
if(versionsByMinecraftVersion[mcVersion])
return versionsByMinecraftVersion[mcVersion].majorVersion;
if(preNetty && preNettyVersionsByProtocolVersion[mcVersion])
return preNettyVersionsByProtocolVersion[mcVersion][0].majorVersion;
if(!preNetty && postNettyVersionsByProtocolVersion[mcVersion])
return postNettyVersionsByProtocolVersion[mcVersion][0].majorVersion;
}

module.exports.versions=protocolVersions;
module.exports.versionsByMinecraftVersion=versionsByMinecraftVersion;
module.exports.preNettyVersionsByProtocolVersion=preNettyVersionsByProtocolVersion;
module.exports.postNettyVersionsByProtocolVersion=postNettyVersionsByProtocolVersion;

var data={
"1.8":{
blocks:require('./minecraft-data/data/1.8/blocks'),
Expand All @@ -26,8 +52,7 @@ var data={
entities: require('./minecraft-data/data/1.8/entities'),
protocol: require('./minecraft-data/data/1.8/protocol'),
windows: require('./minecraft-data/data/1.8/windows'),
version: require('./minecraft-data/data/1.8/version'),
protocolVersions: require('./minecraft-data/data/common/protocolVersions')
version: require('./minecraft-data/data/1.8/version')
},
"1.9":{
blocks:require('./minecraft-data/data/1.9/blocks'),
Expand All @@ -40,7 +65,6 @@ var data={
entities: require('./minecraft-data/data/1.9/entities'),
protocol: require('./minecraft-data/data/1.9/protocol'),
windows: require('./minecraft-data/data/1.9/windows'),
version: require('./minecraft-data/data/1.9/version'),
protocolVersions: require('./minecraft-data/data/common/protocolVersions')
version: require('./minecraft-data/data/1.9/version')
}
};
9 changes: 9 additions & 0 deletions lib/indexer.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,14 @@ module.exports={
index[element[fieldToIndex]]=element;
return index;
},{});
},
buildIndexFromArrayNonUnique:
function(array,fieldToIndex) {
return array.reduce(function(index,element){
if(!index[element[fieldToIndex]])
index[element[fieldToIndex]]=[];
index[element[fieldToIndex]].push(element);
return index;
},{});
}
};
26 changes: 1 addition & 25 deletions lib/loader.js
Original file line number Diff line number Diff line change
@@ -1,28 +1,4 @@
var cache={}; // prevent reindexing when requiring multiple time the same version

module.exports = function(mcVersion,getData)
{
var majorVersion=toMajor(mcVersion);
if(majorVersion==null)
return null;
if(cache[majorVersion])
return cache[majorVersion];
var mcData=getData(majorVersion);
if(mcData==null)
return null;
var nmcData=mcDataToNode(mcData);
cache[majorVersion]=nmcData;
return nmcData;
};

function toMajor(mcVersion)
{
var parts=mcVersion.split(".");
if(parts.size<=1)
return null;
mcVersion=parts.slice(0,2).join(".");
return mcVersion;
}
module.exports=mcDataToNode;

function mcDataToNode(mcData) {
var indexes=require("./indexes.js")(mcData);
Expand Down

0 comments on commit 3ffbd2f

Please sign in to comment.