2424 */
2525package de .bluecolored .bluemap .common ;
2626
27- import com .flowpowered .math .vector .Vector2i ;
2827import de .bluecolored .bluemap .common .plugin .Plugin ;
2928import de .bluecolored .bluemap .common .plugin .serverinterface .ServerInterface ;
29+ import de .bluecolored .bluemap .common .web .WebSettings ;
3030import de .bluecolored .bluemap .core .MinecraftVersion ;
3131import de .bluecolored .bluemap .core .config .*;
32+ import de .bluecolored .bluemap .core .debug .DebugDump ;
3233import de .bluecolored .bluemap .core .logger .Logger ;
34+ import de .bluecolored .bluemap .core .map .BmMap ;
35+ import de .bluecolored .bluemap .core .map .hires .RenderSettings ;
3336import de .bluecolored .bluemap .core .mca .MCAWorld ;
34- import de .bluecolored .bluemap .core .render .RenderSettings ;
35- import de .bluecolored .bluemap .core .render .TileRenderer ;
36- import de .bluecolored .bluemap .core .render .hires .HiresModelManager ;
37- import de .bluecolored .bluemap .core .render .lowres .LowresModelManager ;
3837import de .bluecolored .bluemap .core .resourcepack .ParseResourceException ;
3938import de .bluecolored .bluemap .core .resourcepack .ResourcePack ;
40- import de .bluecolored .bluemap .core .web .WebSettings ;
4139import de .bluecolored .bluemap .core .world .SlicedWorld ;
4240import de .bluecolored .bluemap .core .world .World ;
4341import org .apache .commons .io .FileUtils ;
5048/**
5149 * This is the attempt to generalize as many actions as possible to have CLI and Plugins run on the same general setup-code.
5250 */
51+ @ DebugDump
5352public class BlueMapService {
54- private MinecraftVersion minecraftVersion ;
55- private File configFolder ;
56- private ThrowingFunction <File , UUID , IOException > worldUUIDProvider ;
57- private ThrowingFunction <UUID , String , IOException > worldNameProvider ;
53+ private final MinecraftVersion minecraftVersion ;
54+ private final File configFolder ;
55+ private final ThrowingFunction <File , UUID , IOException > worldUUIDProvider ;
56+ private final ThrowingFunction <UUID , String , IOException > worldNameProvider ;
5857
59- private ConfigManager configManager ;
58+ private final ConfigManager configManager ;
6059
6160 private CoreConfig coreConfig ;
6261 private RenderConfig renderConfig ;
@@ -65,7 +64,7 @@ public class BlueMapService {
6564 private ResourcePack resourcePack ;
6665
6766 private Map <UUID , World > worlds ;
68- private Map <String , MapType > maps ;
67+ private Map <String , BmMap > maps ;
6968
7069 public BlueMapService (MinecraftVersion minecraftVersion , File configFolder ) {
7170 this .minecraftVersion = minecraftVersion ;
@@ -105,17 +104,17 @@ public synchronized void createOrUpdateWebApp(boolean force) throws IOException
105104 public synchronized WebSettings updateWebAppSettings () throws IOException , InterruptedException {
106105 WebSettings webSettings = new WebSettings (new File (getRenderConfig ().getWebRoot (), "data" + File .separator + "settings.json" ));
107106 webSettings .set (getRenderConfig ().isUseCookies (), "useCookies" );
107+ webSettings .set (getRenderConfig ().isEnableFreeFlight (), "freeFlightEnabled" );
108108 webSettings .setAllMapsEnabled (false );
109- for (MapType map : getMaps ().values ()) {
109+ for (BmMap map : getMaps ().values ()) {
110110 webSettings .setMapEnabled (true , map .getId ());
111- webSettings .setFrom (map .getTileRenderer (), map .getId ());
112- webSettings .setFrom (map .getWorld (), map .getId ());
111+ webSettings .setFrom (map );
113112 }
114113 int ordinal = 0 ;
115114 for (MapConfig map : getRenderConfig ().getMapConfigs ()) {
116115 if (!getMaps ().containsKey (map .getId ())) continue ; //don't add not loaded maps
117116 webSettings .setOrdinal (ordinal ++, map .getId ());
118- webSettings .setFrom (map , map . getId () );
117+ webSettings .setFrom (map );
119118 }
120119 webSettings .save ();
121120
@@ -127,14 +126,17 @@ public synchronized Map<UUID, World> getWorlds() throws IOException, Interrupted
127126 return worlds ;
128127 }
129128
130- public synchronized Map <String , MapType > getMaps () throws IOException , InterruptedException {
129+ public synchronized Map <String , BmMap > getMaps () throws IOException , InterruptedException {
131130 if (maps == null ) loadWorldsAndMaps ();
132131 return maps ;
133132 }
134133
135134 private synchronized void loadWorldsAndMaps () throws IOException , InterruptedException {
136135 maps = new HashMap <>();
137136 worlds = new HashMap <>();
137+
138+ ConfigManager configManager = getConfigManager ();
139+ configManager .loadResourceConfigs (configFolder , getResourcePack ());
138140
139141 for (MapConfig mapConfig : getRenderConfig ().getMapConfigs ()) {
140142 String id = mapConfig .getId ();
@@ -154,18 +156,15 @@ private synchronized void loadWorldsAndMaps() throws IOException, InterruptedExc
154156 continue ;
155157 }
156158
157- ConfigManager configManager = getConfigManager ();
158- configManager .loadResourceConfigs (configFolder , getResourcePack ());
159-
160159 World world = worlds .get (worldUUID );
161160 if (world == null ) {
162161 try {
163- world = MCAWorld .load (worldFolder .toPath (), worldUUID , minecraftVersion , configManager .getBlockIdConfig (), configManager .getBlockPropertiesConfig (), configManager .getBiomeConfig (), worldNameProvider .apply (worldUUID ), true );
162+ world = MCAWorld .load (worldFolder .toPath (), worldUUID , minecraftVersion , configManager .getBlockIdConfig (), configManager .getBlockPropertiesConfig (), configManager .getBiomeConfig (), worldNameProvider .apply (worldUUID ), mapConfig . isIgnoreMissingLightData () );
164163 worlds .put (worldUUID , world );
165164 } catch (MissingResourcesException e ) {
166165 throw e ; // rethrow this to stop loading and display resource-missing message
167166 } catch (IOException e ) {
168- Logger .global .logError ("Failed to load map '" + id + "': Failed to read level.dat " , e );
167+ Logger .global .logError ("Failed to load map '" + id + "'! " , e );
169168 continue ;
170169 }
171170 }
@@ -179,28 +178,20 @@ private synchronized void loadWorldsAndMaps() throws IOException, InterruptedExc
179178 world ,
180179 mapConfig .getMin ().min (mapConfig .getMin ().sub (2 , 2 , 2 )), // protect from int-overflow
181180 mapConfig .getMax ().max (mapConfig .getMax ().add (2 , 2 , 2 )) // protect from int-overflow
182- );
181+ );
183182 }
184183 }
185-
186- HiresModelManager hiresModelManager = new HiresModelManager (
187- getRenderConfig ().getWebRoot ().toPath ().resolve ("data" ).resolve (id ).resolve ("hires" ),
184+
185+ BmMap map = new BmMap (
186+ id ,
187+ name ,
188+ world ,
189+ getRenderConfig ().getWebRoot ().toPath ().resolve ("data" ).resolve (id ),
188190 getResourcePack (),
189- mapConfig ,
190- new Vector2i (mapConfig .getHiresTileSize (), mapConfig .getHiresTileSize ())
191- );
192-
193- LowresModelManager lowresModelManager = new LowresModelManager (
194- getRenderConfig ().getWebRoot ().toPath ().resolve ("data" ).resolve (id ).resolve ("lowres" ),
195- new Vector2i (mapConfig .getLowresPointsPerLowresTile (), mapConfig .getLowresPointsPerLowresTile ()),
196- new Vector2i (mapConfig .getLowresPointsPerHiresTile (), mapConfig .getLowresPointsPerHiresTile ()),
197- mapConfig .useGzipCompression ()
198- );
199-
200- TileRenderer tileRenderer = new TileRenderer (hiresModelManager , lowresModelManager );
201-
202- MapType mapType = new MapType (id , name , world , tileRenderer );
203- maps .put (id , mapType );
191+ mapConfig
192+ );
193+
194+ maps .put (id , map );
204195 }
205196
206197 worlds = Collections .unmodifiableMap (worlds );
@@ -209,7 +200,7 @@ private synchronized void loadWorldsAndMaps() throws IOException, InterruptedExc
209200
210201 public synchronized ResourcePack getResourcePack () throws IOException , InterruptedException {
211202 if (resourcePack == null ) {
212- File defaultResourceFile = new File (getCoreConfig ().getDataFolder (), "minecraft-client-" + minecraftVersion .getVersionString () + ".jar" );
203+ File defaultResourceFile = new File (getCoreConfig ().getDataFolder (), "minecraft-client-" + minecraftVersion .getResource (). getVersion (). getVersionString () + ".jar" );
213204 File resourceExtensionsFile = new File (getCoreConfig ().getDataFolder (), "resourceExtensions.zip" );
214205
215206 File textureExportFile = new File (getRenderConfig ().getWebRoot (), "data" + File .separator + "textures.json" );
@@ -222,9 +213,9 @@ public synchronized ResourcePack getResourcePack() throws IOException, Interrupt
222213
223214 //download file
224215 try {
225- Logger .global .logInfo ("Downloading " + minecraftVersion .getClientDownloadUrl () + " to " + defaultResourceFile + " ..." );
216+ Logger .global .logInfo ("Downloading " + minecraftVersion .getResource (). getClientUrl () + " to " + defaultResourceFile + " ..." );
226217 FileUtils .forceMkdirParent (defaultResourceFile );
227- FileUtils .copyURLToFile (new URL (minecraftVersion .getClientDownloadUrl ()), defaultResourceFile , 10000 , 10000 );
218+ FileUtils .copyURLToFile (new URL (minecraftVersion .getResource (). getClientUrl ()), defaultResourceFile , 10000 , 10000 );
228219 } catch (IOException e ) {
229220 throw new IOException ("Failed to download resources!" , e );
230221 }
@@ -238,7 +229,7 @@ public synchronized ResourcePack getResourcePack() throws IOException, Interrupt
238229
239230 if (resourceExtensionsFile .exists ()) FileUtils .forceDelete (resourceExtensionsFile );
240231 FileUtils .forceMkdirParent (resourceExtensionsFile );
241- FileUtils .copyURLToFile (Plugin .class .getResource ("/de/bluecolored/bluemap/" + minecraftVersion .getResourcePrefix () + "/resourceExtensions.zip" ), resourceExtensionsFile , 10000 , 10000 );
232+ FileUtils .copyURLToFile (Plugin .class .getResource ("/de/bluecolored/bluemap/" + minecraftVersion .getResource (). getResourcePrefix () + "/resourceExtensions.zip" ), resourceExtensionsFile , 10000 , 10000 );
242233
243234 //find more resource packs
244235 File [] resourcePacks = resourcePackFolder .listFiles ();
0 commit comments