4 * Copyright 2020 Elias Fleckenstein <eliasfleckenstein@web.de>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
27 addEventListener("contextmenu", event => {
28 event.preventDefault();
31 dragonblocks.settings = $.getJSON("settings.json").responseJSON;
32 dragonblocks.backlog = "";
33 dragonblocks.mods = [];
34 dragonblocks.gamemods = $.getJSON({
37 data: {call: "getGamemods"},
39 dragonblocks.availableMods = $.getJSON({
42 data: {call: "getMods"},
44 dragonblocks.loggedin = $.getJSON({
47 data: {call: "isLoggedin"}
49 dragonblocks.username = "singleplayer";
50 if(dragonblocks.loggedin){
51 dragonblocks.username = $.post({
53 data: {call: "getUsername"}
56 dragonblocks.log = function(text){
57 console.log("[Dragonblocks] " + text);
58 dragonblocks.backlog += text + "\n";
60 dragonblocks.error = function(err){
61 let error = new Error(err);
62 dragonblocks.backlog += error;
65 dragonblocks.getToken = function(){
66 return "#" + (Math.random() * 10).toString().replace(".", "");
68 dragonblocks.getModpath = function(mod){
69 if(dragonblocks.availableMods.indexOf(mod) != -1)
71 if(dragonblocks.gamemods.indexOf(mod) != -1)
74 dragonblocks.getVersion = function(){
75 let version = dragonblocks.settings.version;
76 return "Dragonblocks " + version.major + "." + version.minor + (version.patch ? "." + version.patch : "") + (version.snapshot ? "-dev-" + version.snapshot : "");
78 dragonblocks.start = function(){
79 for(let func of dragonblocks.onStartFunctions)
82 for(let mod of dragonblocks.gamemods)
83 dragonblocks.loadMod(mod);
84 for(let mod of dragonblocks.mods)
85 dragonblocks.loadMod(mod);
86 new dragonblocks.Map();
87 new dragonblocks.Player();
88 if(! dragonblocks.worldIsLoaded)
89 dragonblocks.generateMap();
90 for(let func of dragonblocks.onStartedFunctions)
94 dragonblocks.onStartFunctions = [];
95 dragonblocks.registerOnStart = function(func){
96 dragonblocks.onStartFunctions.push(func);
98 dragonblocks.onStartedFunctions = [];
99 dragonblocks.registerOnStarted = function(func){
100 dragonblocks.onStartedFunctions.push(func);
102 dragonblocks.addFinalStep = function(step){
103 dragonblocks.registerOnStarted(step);
104 dragonblocks.log("dragonblocks.addFinalStep(...) is deprecated. Use dragonblocks.registerOnStarted instead. Trace:");
107 dragonblocks.quit = function(){
108 for(let func of dragonblocks.onQuitFunctions)
110 if(dragonblocks.loggedin)
118 dragonblocks.onQuitFunctions = [];
119 dragonblocks.registerOnQuit = function(func){
120 dragonblocks.onQuitFunctions.push(func);
122 dragonblocks.loadWorld = function(world){
123 dragonblocks.worldIsLoaded = true;
124 dragonblocks.worldname = world;
125 dragonblocks.world = $.getJSON("worlds/" + world + "/world.json").responseJSON;
126 dragonblocks.mods = dragonblocks.world.mods;
127 dragonblocks.start();
129 dragonblocks.createWorld = function(properties){
130 dragonblocks.worldIsLoaded = false;
131 dragonblocks.worldname = properties.worldname;
132 dragonblocks.world = dragonblocks.getEmptyWorld();
133 dragonblocks.entities["dragonblocks:player"].meta.creative = (properties.gamemode == "creative");
134 for(mod in properties.mods)
135 properties.mods[mod] && dragonblocks.mods.push(mod);
136 dragonblocks.mapgen.selected = properties.mapgen;
137 dragonblocks.start();
139 dragonblocks.loadedMods = [];
140 dragonblocks.loadingMods = {};
141 dragonblocks.loadMod = function(modname){
144 if(dragonblocks.loadingMods[modname])
145 dragonblocks.error("Circular Mod Dependencies: " + modname);
146 if(dragonblocks.loadedMods.indexOf(modname) != -1)
148 if(dragonblocks.gamemods.indexOf(modname) != -1)
149 var modpath = "game/" + modname;
150 else if(dragonblocks.availableMods.indexOf(modname) != -1)
151 var modpath = "mods/" + modname;
153 dragonblocks.error("Unsolved Mod Dependencies: " + modname);
154 let dependencyRequest = $.get(modpath + "/dependencies.txt");
155 if(dependencyRequest.status == 200){
156 let dependencies = dependencyRequest.responseText.split("\n");
157 for(let dependency of dependencies)
158 dragonblocks.loadMod(dependency);
160 $.getScript(modpath + "/init.js");
161 dragonblocks.loadedMods.push(modname);
162 dragonblocks.loadingMods[modname] = false;
164 dragonblocks.modules = ["ressources", "key_handler", "gui", "mapgen", "world", "item", "node", "tool", "group", "builtin", "map_node", "map", "itemstack", "inventory", "inventory_group", "hudbar", "inventory_container", "creative_inventory", "recipe", "craftfield", "menu", "skin", "entity", "map_interaction", "spawned_entity", "item_entity", "timer", "player", "pixel_manipulator", "chat", "chatcommands", "mainmenu"];
165 dragonblocks.moduleCount = dragonblocks.modules.length;
166 dragonblocks.loadModule = function(){
167 if(dragonblocks.modules[0]){
168 document.getElementById("elidragon.status").innerHTML = dragonblocks.modules[0] + ".js";
170 url: "engine/" + dragonblocks.modules.shift() + ".js",
173 document.getElementById("elidragon.loadbar").style.width = (dragonblocks.moduleCount - dragonblocks.modules.length) / dragonblocks.moduleCount * 100 + "%";
174 dragonblocks.loadModule();
179 dragonblocks.loadModule();