move blueprint saves inside world folder, fix #2886

This commit is contained in:
asiekierka 2015-09-20 09:43:49 +02:00
parent 31950ca099
commit 6ebb701f23
2 changed files with 54 additions and 50 deletions

View file

@ -87,36 +87,7 @@ import buildcraft.builders.TileConstructionMarker;
import buildcraft.builders.TileFiller;
import buildcraft.builders.TileQuarry;
import buildcraft.builders.blueprints.RealBlueprintDeployer;
import buildcraft.builders.schematics.SchematicAir;
import buildcraft.builders.schematics.SchematicBed;
import buildcraft.builders.schematics.SchematicCactus;
import buildcraft.builders.schematics.SchematicCustomStack;
import buildcraft.builders.schematics.SchematicDirt;
import buildcraft.builders.schematics.SchematicDoor;
import buildcraft.builders.schematics.SchematicEnderChest;
import buildcraft.builders.schematics.SchematicFactoryBlock;
import buildcraft.builders.schematics.SchematicFactoryEntity;
import buildcraft.builders.schematics.SchematicFactoryMask;
import buildcraft.builders.schematics.SchematicFarmland;
import buildcraft.builders.schematics.SchematicFire;
import buildcraft.builders.schematics.SchematicGlassPane;
import buildcraft.builders.schematics.SchematicGravel;
import buildcraft.builders.schematics.SchematicHanging;
import buildcraft.builders.schematics.SchematicLever;
import buildcraft.builders.schematics.SchematicMinecart;
import buildcraft.builders.schematics.SchematicPiston;
import buildcraft.builders.schematics.SchematicPortal;
import buildcraft.builders.schematics.SchematicPumpkin;
import buildcraft.builders.schematics.SchematicRail;
import buildcraft.builders.schematics.SchematicRedstoneDiode;
import buildcraft.builders.schematics.SchematicRedstoneLamp;
import buildcraft.builders.schematics.SchematicRedstoneWire;
import buildcraft.builders.schematics.SchematicSeeds;
import buildcraft.builders.schematics.SchematicSign;
import buildcraft.builders.schematics.SchematicSkull;
import buildcraft.builders.schematics.SchematicStairs;
import buildcraft.builders.schematics.SchematicStone;
import buildcraft.builders.schematics.SchematicTripWireHook;
import buildcraft.builders.schematics.*;
import buildcraft.builders.statements.BuildersActionProvider;
import buildcraft.core.CompatHooks;
import buildcraft.core.DefaultProps;
@ -136,6 +107,37 @@ import buildcraft.core.builders.schematics.SchematicTileCreative;
import buildcraft.core.builders.schematics.SchematicWallSide;
import buildcraft.core.config.ConfigManager;
import buildcraft.core.proxy.CoreProxy;
import com.google.common.collect.Lists;
import cpw.mods.fml.client.event.ConfigChangedEvent;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.event.*;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.network.NetworkRegistry;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.entity.item.*;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.launchwrapper.Launch;
import net.minecraft.stats.Achievement;
import net.minecraft.world.World;
import net.minecraftforge.client.event.TextureStitchEvent;
import net.minecraftforge.common.DimensionManager;
import net.minecraftforge.common.ForgeChunkManager;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.config.Property;
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.List;
@Mod(name = "BuildCraft Builders", version = Version.VERSION, useMetadata = false, modid = "BuildCraft|Builders", dependencies = DefaultProps.DEPENDENCY_CORE)
public class BuildCraftBuilders extends BuildCraftMod {
@ -169,7 +171,7 @@ public class BuildCraftBuilders extends BuildCraftMod {
public static boolean quarryLoadsChunks = true;
public static boolean quarryOneTimeUse = false;
private String blueprintServerDir, blueprintClientDir;
private String oldBlueprintServerDir, blueprintClientDir;
public class QuarryChunkloadCallback implements ForgeChunkManager.OrderedLoadingCallback {
@Override
@ -209,7 +211,7 @@ public class BuildCraftBuilders extends BuildCraftMod {
BuildCraftCore.mainConfigManager.register("blueprints.serverDatabaseDirectory",
"\"$MINECRAFT" + File.separator + "config" + File.separator + "buildcraft" + File.separator
+ "blueprints" + File.separator + "server\"",
"Location for the server blueprint database (used by all blueprint items).", ConfigManager.RestartRequirement.WORLD);
"DEPRECATED - USED ONLY FOR COMPATIBILITY", ConfigManager.RestartRequirement.GAME);
BuildCraftCore.mainConfigManager.register("blueprints.clientDatabaseDirectory",
"\"$MINECRAFT" + File.separator + "blueprints\"",
"Location for the client blueprint database (used by the Electronic Library).", ConfigManager.RestartRequirement.NONE);
@ -236,9 +238,8 @@ public class BuildCraftBuilders extends BuildCraftMod {
if (restartType == ConfigManager.RestartRequirement.GAME) {
reloadConfig(ConfigManager.RestartRequirement.WORLD);
} else if (restartType == ConfigManager.RestartRequirement.WORLD) {
blueprintServerDir = BuildCraftCore.mainConfigManager.get("blueprints.serverDatabaseDirectory").getString();
blueprintServerDir = JavaTools.stripSurroundingQuotes(replacePathVariables(blueprintServerDir));
serverDB.init(new String[] {blueprintServerDir}, blueprintServerDir);
oldBlueprintServerDir = BuildCraftCore.mainConfigManager.get("blueprints.serverDatabaseDirectory").getString();
oldBlueprintServerDir = JavaTools.stripSurroundingQuotes(replacePathVariables(oldBlueprintServerDir));
reloadConfig(ConfigManager.RestartRequirement.NONE);
} else {
@ -333,8 +334,8 @@ public class BuildCraftBuilders extends BuildCraftMod {
}
}
// Refresh the databases once all the library type handlers are registered
serverDB.refresh();
// Refresh the client database once all the library type handlers are registered
// The server database is refreshed later
clientDB.refresh();
}
@ -627,6 +628,12 @@ public class BuildCraftBuilders extends BuildCraftMod {
TilePathMarker.clearAvailableMarkersList();
}
@Mod.EventHandler
public void serverAboutToStart(FMLServerAboutToStartEvent event) {
String blueprintPath = new File(DimensionManager.getCurrentSaveRootDirectory(), "buildcraft" + File.separator + "blueprints").getPath();
serverDB.init(new String[]{oldBlueprintServerDir, blueprintPath}, blueprintPath);
}
@SubscribeEvent
@SideOnly(Side.CLIENT)
public void loadTextures(TextureStitchEvent.Pre evt) {

View file

@ -33,7 +33,7 @@ public class LibraryDatabase {
protected LibraryId[] pages = new LibraryId[0];
private File outputDir;
private File[] inputDirs;
private List<File> inputDirs;
/**
* Initialize the blueprint database.
@ -47,10 +47,13 @@ public class LibraryDatabase {
outputDir.mkdirs();
}
inputDirs = new File[inputPaths.length];
inputDirs = new ArrayList<File>();
for (int i = 0; i < inputDirs.length; ++i) {
inputDirs[i] = new File(inputPaths[i]);
for (int i = 0; i < inputPaths.length; ++i) {
File inputDir = new File(inputPaths[i]);
if (inputDir.exists()) {
inputDirs.add(inputDir);
}
}
refresh();
@ -58,7 +61,9 @@ public class LibraryDatabase {
public void refresh() {
blueprintIds = new TreeSet<LibraryId>();
loadIndex(inputDirs);
for (File f : inputDirs) {
loadIndex(f);
}
}
public void deleteBlueprint (LibraryId id) {
@ -117,14 +122,6 @@ public class LibraryDatabase {
}
}
private void loadIndex(File[] dirs) {
for (File dir : dirs) {
if (dir != null) {
loadIndex(dir);
}
}
}
private void loadIndex(File directory) {
FilenameFilter filter = new FilenameFilter() {
@Override