- Версия(и) Minecraft
- 1.7+
Простое шифрование и последующее дешифрование текстур для Вашего проекта.
Недавно столкнулся с такой проблемой, что потребовалось закриптовать некоторые изображения для другого проекта вне майнкрафта и в открытом доступе нашёл исходный код того, что мне нужно.
Решил немного переделать под себя, чтобы было удобней пользоваться и создал небольшую программу. Первым делом указываете путь к директории, после ключ (цифры в кол-ве от 1 до 10), который будет использоваться для шифрования и последующего дешифрования файла.
После криптования изображений нужно сделать что?
Дешифровать и загрузить их в нашу любимую игру.
[!] Для этого мы создадим для удобства отдельный класс, где будем хранить наши текстуры:
Сам процесс будет происходить следующим образом:
[!] Для этого в ClientProxy создадим 3 метода createTempDir, deleteTempDir, loadTexture:
После, в методе пре-Инициализации вызываете метод создания временной папки, который будет хранить Ваши текстуры.
В методе инициализации подгружаете сами текстуры и в конце удаляете временную папку.
В конце концов Ваш ClientProxy должен выглядеть так:
Я думаю, что было всё ясно и понятно. По сути такая мелочь, но бывает временами очень полезна.
Как хранить ключ - решать Вам.
На последок можно и анекдот от Олега Шпагина:
Сколько нужно программистов, чтобы открутить лампочку?
- 0, потому что программисты лампочки не откручивают!
Недавно столкнулся с такой проблемой, что потребовалось закриптовать некоторые изображения для другого проекта вне майнкрафта и в открытом доступе нашёл исходный код того, что мне нужно.
Решил немного переделать под себя, чтобы было удобней пользоваться и создал небольшую программу. Первым делом указываете путь к директории, после ключ (цифры в кол-ве от 1 до 10), который будет использоваться для шифрования и последующего дешифрования файла.
После криптования изображений нужно сделать что?
Дешифровать и загрузить их в нашу любимую игру.
[!] Для этого мы создадим для удобства отдельный класс, где будем хранить наши текстуры:
_Resources:
public class _Resources {
public static ResourceLocation clanMenuBckg;
}
Сам процесс будет происходить следующим образом:
- В пре-инициализации мы создаём пустую папку.
- В инициализации подгружаем текстуры.
- И сразу же после аплоада текстур мы эту самую папку и удаляем.
[!] Для этого в ClientProxy создадим 3 метода createTempDir, deleteTempDir, loadTexture:
Java:
public void createTempDir() {
File file = new File(dir + "/temp");
if (!file.isDirectory()) {
file.mkdirs();
}
}
public void deleteTempDir() {
File file = new File(dir + "/temp");
for (File myFile : file.listFiles()) {
if (myFile.isFile()) myFile.delete();
file.delete();
}
}
public ResourceLocation loadTexture(String path, String texture) throws FileNotFoundException, IOException {
int key = decryptKey;
FileInputStream fis = new FileInputStream(dir + "/textures/" + path + texture + ".png");
byte data[] = new byte[fis.available()];
fis.read(data);
int i = 0;
for (byte b : data) {
data[i] = (byte) (b ^ key);
i++;
}
FileOutputStream fos = new FileOutputStream(dir + "/temp/" + texture + ".png");
fos.write(data);
fos.close();
fis.close();
String texturePathStr = dir + "/temp/" + texture + ".png";
Path externalPath = Paths.get(texturePathStr);
ResourceLocation decryptTexture = null;
if (Files.exists(externalPath))
decryptTexture =
Minecraft
.getMinecraft()
.getTextureManager()
.getDynamicTextureLocation(texture, new DynamicTexture(ImageIO.read(new File(texturePathStr))));
return decryptTexture;
}
После, в методе пре-Инициализации вызываете метод создания временной папки, который будет хранить Ваши текстуры.
В методе инициализации подгружаете сами текстуры и в конце удаляете временную папку.
В конце концов Ваш ClientProxy должен выглядеть так:
ClientProxy:
public class ClientProxy extends CommonProxy {
String dir = "justtest"; // Директория, которую вы создаёте в run
int decryptKey = 000000000; // Ваш ключ, который Вы указывали в программе
@Override
public void preInit(FMLPreInitializationEvent event) {
super.preInit(event);
createTempDir(); // Создаём временную папку
}
@Override
public void init(FMLInitializationEvent event) {
super.init(event);
try {
_Resources.test = loadTexture("test/", "texture"); // Загружаем нашу текстуру
} catch (IOException e) {
e.printStackTrace();
}
deleteTempDir(); // Удаляем временную папку
}
@Override
public void postInit(FMLPostInitializationEvent event) { super.postInit(event); }
public void createTempDir() {
File file = new File(dir + "/temp");
if (!file.isDirectory()) {
file.mkdirs();
}
}
public void deleteTempDir() {
File file = new File(dir + "/temp");
for (File myFile : file.listFiles()) {
if (myFile.isFile()) myFile.delete();
file.delete();
}
}
public ResourceLocation loadTexture(String path, String texture) throws FileNotFoundException, IOException {
int key = decryptKey;
FileInputStream fis = new FileInputStream(dir + "/textures/" + path + texture + ".png");
byte data[] = new byte[fis.available()];
fis.read(data);
int i = 0;
for (byte b : data) {
data[i] = (byte) (b ^ key);
i++;
}
FileOutputStream fos = new FileOutputStream(dir + "/temp/" + texture + ".png");
fos.write(data);
fos.close();
fis.close();
String texturePathStr = dir + "/temp/" + texture + ".png";
Path externalPath = Paths.get(texturePathStr);
ResourceLocation decryptTexture = null;
if (Files.exists(externalPath))
decryptTexture =
Minecraft
.getMinecraft()
.getTextureManager()
.getDynamicTextureLocation(texture, new DynamicTexture(ImageIO.read(new File(texturePathStr))));
return decryptTexture;
}
}
Я думаю, что было всё ясно и понятно. По сути такая мелочь, но бывает временами очень полезна.
Как хранить ключ - решать Вам.
На последок можно и анекдот от Олега Шпагина:
Сколько нужно программистов, чтобы открутить лампочку?
- 0, потому что программисты лампочки не откручивают!