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.settings.version.commit = $.get({
37 data: {call: "commitID"}
38 }).responseText || dragonblocks.settings.version.commit;
39 dragonblocks.gamemods = $.getJSON({
42 data: {call: "getGamemods"},
44 dragonblocks.availableMods = $.getJSON({
47 data: {call: "getMods"},
49 dragonblocks.loggedin = $.getJSON({
52 data: {call: "isLoggedin"}
54 dragonblocks.username = "singleplayer";
55 if(dragonblocks.loggedin){
56 dragonblocks.username = $.post({
58 data: {call: "getUsername"}
61 dragonblocks.log = function(text){
62 console.log("[Dragonblocks] " + text);
63 dragonblocks.backlog += text + "\n";
65 dragonblocks.error = function(err){
66 let error = new Error(err);
67 dragonblocks.backlog += error;
70 dragonblocks.getToken = function(){
71 return "#" + (Math.random() * 10).toString().replace(".", "");
73 dragonblocks.getModpath = function(mod){
74 if(dragonblocks.availableMods.indexOf(mod) != -1)
76 if(dragonblocks.gamemods.indexOf(mod) != -1)
79 dragonblocks.getVersion = function(){
80 let version = dragonblocks.settings.version;
81 return "Dragonblocks " + version.major + "." + version.minor + (version.patch ? "." + version.patch : "") + (version.development ? "-dev-" + version.commit : "");
83 dragonblocks.start = function(){
84 for(let func of dragonblocks.onStartFunctions)
87 for(let mod of dragonblocks.gamemods)
88 dragonblocks.loadMod(mod);
89 for(let mod of dragonblocks.mods)
90 dragonblocks.loadMod(mod);
91 new dragonblocks.Map();
92 new dragonblocks.Player();
93 if(! dragonblocks.worldIsLoaded)
94 dragonblocks.generateMap();
95 for(let func of dragonblocks.onStartedFunctions)
99 dragonblocks.onStartFunctions = [];
100 dragonblocks.registerOnStart = function(func){
101 dragonblocks.onStartFunctions.push(func);
103 dragonblocks.onStartedFunctions = [];
104 dragonblocks.registerOnStarted = function(func){
105 dragonblocks.onStartedFunctions.push(func);
107 dragonblocks.addFinalStep = function(step){
108 dragonblocks.registerOnStarted(step);
109 dragonblocks.log("dragonblocks.addFinalStep(...) is deprecated. Use dragonblocks.registerOnStarted instead. Trace:");
112 dragonblocks.quit = function(){
113 for(let func of dragonblocks.onQuitFunctions)
115 if(dragonblocks.loggedin)
123 dragonblocks.onQuitFunctions = [];
124 dragonblocks.registerOnQuit = function(func){
125 dragonblocks.onQuitFunctions.push(func);
127 dragonblocks.loadWorld = function(world){
128 dragonblocks.worldIsLoaded = true;
129 dragonblocks.worldname = world;
130 dragonblocks.world = $.getJSON("worlds/" + world + "/world.json").responseJSON;
131 dragonblocks.mods = dragonblocks.world.mods;
132 dragonblocks.start();
134 dragonblocks.createWorld = function(properties){
135 dragonblocks.worldIsLoaded = false;
136 dragonblocks.worldname = properties.worldname;
137 dragonblocks.world = dragonblocks.getEmptyWorld();
138 dragonblocks.entities["dragonblocks:player"].meta.creative = (properties.gamemode == "creative");
139 for(mod in properties.mods)
140 properties.mods[mod] && dragonblocks.mods.push(mod);
141 dragonblocks.mapgen.selected = properties.mapgen;
142 dragonblocks.start();
144 dragonblocks.loadedMods = [];
145 dragonblocks.loadingMods = {};
146 dragonblocks.loadMod = function(modname){
149 if(dragonblocks.loadingMods[modname])
150 dragonblocks.error("Circular Mod Dependencies: " + modname);
151 if(dragonblocks.loadedMods.indexOf(modname) != -1)
153 if(dragonblocks.gamemods.indexOf(modname) != -1)
154 var modpath = "game/" + modname;
155 else if(dragonblocks.availableMods.indexOf(modname) != -1)
156 var modpath = "mods/" + modname;
158 dragonblocks.error("Unsolved Mod Dependencies: " + modname);
159 let dependencyRequest = $.get(modpath + "/dependencies.txt");
160 if(dependencyRequest.status == 200){
161 let dependencies = dependencyRequest.responseText.split("\n");
162 for(let dependency of dependencies)
163 dragonblocks.loadMod(dependency);
165 $.getScript(modpath + "/init.js");
166 dragonblocks.loadedMods.push(modname);
167 dragonblocks.loadingMods[modname] = false;
169 dragonblocks.modules = [
186 "inventory_container",
187 "creative_inventory",
204 dragonblocks.moduleCount = dragonblocks.modules.length;
205 dragonblocks.loadModule = function(){
206 if(dragonblocks.modules[0]){
207 document.getElementById("elidragon.status").innerHTML = dragonblocks.modules[0] + ".js";
209 url: "engine/" + dragonblocks.modules.shift() + ".js",
212 document.getElementById("elidragon.loadbar").style.width = (dragonblocks.moduleCount - dragonblocks.modules.length) / dragonblocks.moduleCount * 100 + "%";
213 dragonblocks.loadModule();
218 dragonblocks.loadModule();