mirror of
https://github.com/BlueMap-Minecraft/BlueMap.git
synced 2024-11-24 03:25:17 +01:00
Merge branch 'mc/1.13' into mc/1.12
This commit is contained in:
commit
b8f66d7a6f
@ -78,6 +78,11 @@ public void unregisterAllListeners() {
|
||||
|
||||
@Override
|
||||
public UUID getUUIDForWorld(File worldFolder) throws IOException {
|
||||
//if it is a dimension folder
|
||||
if (!new File(worldFolder, "level.dat").exists()) {
|
||||
worldFolder = worldFolder.getParentFile();
|
||||
}
|
||||
|
||||
final File normalizedWorldFolder = worldFolder.getCanonicalFile();
|
||||
|
||||
Future<UUID> futureUUID;
|
||||
|
@ -134,7 +134,7 @@ maps: [
|
||||
{
|
||||
id: "end"
|
||||
name: "End"
|
||||
world: "world_the_end"
|
||||
world: "world_the_end/DIM1"
|
||||
|
||||
# We dont want a blue sky in the end
|
||||
skyColor: "#080010"
|
||||
@ -150,7 +150,7 @@ maps: [
|
||||
{
|
||||
id: "nether"
|
||||
name: "Nether"
|
||||
world: "world_nether"
|
||||
world: "world_nether/DIM-1"
|
||||
|
||||
skyColor: "#290000"
|
||||
|
||||
|
@ -98,7 +98,7 @@ public LightData getLightData(Vector3i pos) {
|
||||
int sectionY = MCAUtil.blockToChunk(pos.getY());
|
||||
|
||||
Section section = this.sections[sectionY];
|
||||
if (section == null) return LightData.FULL;
|
||||
if (section == null) return LightData.SKY;
|
||||
|
||||
return section.getLightData(pos);
|
||||
}
|
||||
|
@ -107,7 +107,7 @@ public LightData getLightData(Vector3i pos) {
|
||||
int sectionY = MCAUtil.blockToChunk(pos.getY());
|
||||
|
||||
Section section = this.sections[sectionY];
|
||||
if (section == null) return LightData.FULL;
|
||||
if (section == null) return LightData.SKY;
|
||||
|
||||
return section.getLightData(pos);
|
||||
}
|
||||
|
@ -107,7 +107,7 @@ public LightData getLightData(Vector3i pos) {
|
||||
int sectionY = MCAUtil.blockToChunk(pos.getY());
|
||||
|
||||
Section section = this.sections[sectionY];
|
||||
if (section == null) return LightData.FULL;
|
||||
if (section == null) return LightData.SKY;
|
||||
|
||||
return section.getLightData(pos);
|
||||
}
|
||||
|
@ -169,7 +169,7 @@ public Block getBlock(Vector3i pos) {
|
||||
}
|
||||
|
||||
if (pos.getY() > getMaxY()) {
|
||||
return new Block(this, BlockState.AIR, LightData.FULL, Biome.DEFAULT, BlockProperties.TRANSPARENT, pos);
|
||||
return new Block(this, BlockState.AIR, LightData.SKY, Biome.DEFAULT, BlockProperties.TRANSPARENT, pos);
|
||||
}
|
||||
|
||||
try {
|
||||
|
@ -45,6 +45,7 @@
|
||||
import de.bluecolored.bluemap.core.logger.Logger;
|
||||
import de.bluecolored.bluemap.core.resourcepack.BlockStateResource.Builder;
|
||||
import de.bluecolored.bluemap.core.resourcepack.fileaccess.BluemapAssetOverrideFileAccess;
|
||||
import de.bluecolored.bluemap.core.resourcepack.fileaccess.CaseInsensitiveFileAccess;
|
||||
import de.bluecolored.bluemap.core.resourcepack.fileaccess.CombinedFileAccess;
|
||||
import de.bluecolored.bluemap.core.resourcepack.fileaccess.FileAccess;
|
||||
import de.bluecolored.bluemap.core.world.BlockState;
|
||||
@ -140,7 +141,7 @@ public void load(File... sources) {
|
||||
}
|
||||
}
|
||||
|
||||
FileAccess sourcesAccess = new BluemapAssetOverrideFileAccess(combinedSources);
|
||||
FileAccess sourcesAccess = new CaseInsensitiveFileAccess(new BluemapAssetOverrideFileAccess(combinedSources));
|
||||
|
||||
textures.reloadAllTextures(sourcesAccess);
|
||||
|
||||
|
@ -0,0 +1,108 @@
|
||||
/*
|
||||
* This file is part of BlueMap, licensed under the MIT License (MIT).
|
||||
*
|
||||
* Copyright (c) Blue (Lukas Rieger) <https://bluecolored.de>
|
||||
* Copyright (c) contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
package de.bluecolored.bluemap.core.resourcepack.fileaccess;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* This {@link FileAccess} maps its parent {@link FileAccess} to first look in assets/[namespace]/bluemap/... instead of assets/[namespace]/...
|
||||
*/
|
||||
public class CaseInsensitiveFileAccess implements FileAccess {
|
||||
|
||||
public FileAccess parent;
|
||||
|
||||
public CaseInsensitiveFileAccess(FileAccess parent) {
|
||||
this.parent = parent;
|
||||
}
|
||||
|
||||
@Override
|
||||
public InputStream readFile(String path) throws FileNotFoundException, IOException {
|
||||
try {
|
||||
return parent.readFile(path);
|
||||
} catch (FileNotFoundException ex) {
|
||||
try {
|
||||
return parent.readFile(path.toLowerCase());
|
||||
} catch (FileNotFoundException ex2) {
|
||||
path = correctPathCase(path);
|
||||
return parent.readFile(path);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String correctPathCase(String path) throws FileNotFoundException, IOException {
|
||||
path = FileAccess.normalize(path);
|
||||
String[] pathParts = path.split("/");
|
||||
|
||||
String correctPath = "";
|
||||
for (int i = 0; i < pathParts.length; i++) {
|
||||
String part = correctPath + pathParts[i];
|
||||
|
||||
boolean found = false;
|
||||
for(String folder : listFolders(correctPath)) {
|
||||
if (!folder.equalsIgnoreCase(part)) continue;
|
||||
|
||||
part = folder;
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!found && i == pathParts.length - 1) {
|
||||
for(String folder : listFiles(correctPath, false)) {
|
||||
if (!folder.equalsIgnoreCase(part)) continue;
|
||||
|
||||
part = folder;
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!found) throw new FileNotFoundException();
|
||||
|
||||
correctPath = part + "/";
|
||||
}
|
||||
|
||||
correctPath = FileAccess.normalize(correctPath);
|
||||
return correctPath;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<String> listFiles(String path, boolean recursive) {
|
||||
return parent.listFiles(path, recursive);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<String> listFolders(String path) {
|
||||
return parent.listFolders(path);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
parent.close();
|
||||
}
|
||||
|
||||
}
|
@ -31,6 +31,7 @@
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Enumeration;
|
||||
import java.util.HashSet;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipException;
|
||||
import java.util.zip.ZipFile;
|
||||
@ -85,14 +86,20 @@ public Collection<String> listFiles(String path, boolean recursive) {
|
||||
public Collection<String> listFolders(String path) {
|
||||
path = normalizeFolderPath(path);
|
||||
|
||||
Collection<String> folders = new ArrayList<String>();
|
||||
Collection<String> folders = new HashSet<String>();
|
||||
for (Enumeration<? extends ZipEntry> entries = file.entries(); entries.hasMoreElements();) {
|
||||
ZipEntry entry = entries.nextElement();
|
||||
|
||||
if (!entry.isDirectory()) continue;
|
||||
|
||||
String file = entry.getName();
|
||||
file = file.substring(0, file.length() - 1); //strip last /
|
||||
if (!entry.isDirectory()) {
|
||||
int nameSplit = file.lastIndexOf('/');
|
||||
if (nameSplit == -1) continue;
|
||||
file = file.substring(0, nameSplit);
|
||||
}
|
||||
file = normalizeFolderPath(file);
|
||||
|
||||
//strip last /
|
||||
file = file.substring(0, file.length() - 1);
|
||||
|
||||
int nameSplit = file.lastIndexOf('/');
|
||||
String filePath = "/";
|
||||
@ -101,7 +108,17 @@ public Collection<String> listFolders(String path) {
|
||||
}
|
||||
filePath = normalizeFolderPath(filePath);
|
||||
|
||||
if (!path.equals(filePath)) continue;
|
||||
if (!filePath.startsWith(path)) continue;
|
||||
|
||||
int subFolderMark = file.indexOf('/', path.length());
|
||||
if (subFolderMark != -1) {
|
||||
file = file.substring(0, subFolderMark);
|
||||
}
|
||||
|
||||
file = normalizeFolderPath(file);
|
||||
|
||||
//strip last /
|
||||
file = file.substring(0, file.length() - 1);
|
||||
|
||||
folders.add(file);
|
||||
}
|
||||
|
@ -27,7 +27,8 @@
|
||||
public class LightData {
|
||||
|
||||
public static final LightData ZERO = new LightData(0, 0);
|
||||
public static final LightData FULL = new LightData(15, 15);
|
||||
public static final LightData SKY = new LightData(15, 0);
|
||||
public static final LightData FULL = new LightData(15, 15);
|
||||
|
||||
private final int skyLight, blockLight;
|
||||
|
||||
|
@ -180,7 +180,7 @@ private Block createAirBlock(Vector3i pos) {
|
||||
return new Block(
|
||||
this,
|
||||
BlockState.AIR,
|
||||
pos.getY() < this.min.getY() ? LightData.ZERO : LightData.FULL,
|
||||
pos.getY() < this.min.getY() ? LightData.ZERO : LightData.SKY,
|
||||
Biome.DEFAULT,
|
||||
BlockProperties.TRANSPARENT,
|
||||
pos
|
||||
|
Loading…
Reference in New Issue
Block a user