diff --git a/build.gradle b/build.gradle index d0941ad37..f88652c65 100644 --- a/build.gradle +++ b/build.gradle @@ -29,27 +29,12 @@ minecraft { sourceCompatibility = 1.8 targetCompatibility = 1.8 -configurations { - shade - compile.extendsFrom shade -} - -// List of all supported OS for zstd compression (This is include only for anyone which is not using the default compression) -def supportedOS = [ - "linux_amd64", - "linux_i386", - "win_amd64", - "win_x86", - "darwin_x86_64", - "darwin_aarch64" -] - dependencies { // you may put jars on which you depend on in ./libs // or you may define them like so.. //compile "some.group:artifact:version:classifier" //compile "some.group:artifact:version" - + // real examples //compile 'com.mod-buildcraft:buildcraft:6.0.8:dev' // adds buildcraft to the dev env //compile 'com.googlecode.efficient-java-matrix-library:ejml:0.24' // adds ejml to the dev env @@ -57,44 +42,27 @@ dependencies { // for more info... // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html // http://www.gradle.org/docs/current/userguide/dependency_management.html -// shade 'com.github.luben:zstd-jni:1.5.2-2' - Remove almost implementations of zstd - - for (os in supportedOS) { - shade ("com.github.luben:zstd-jni:1.5.2-2:${os}") - } } processResources -{ - // this will ensure that this task is redone when the versions change. - inputs.property "version", project.version - inputs.property "mcversion", project.minecraft.version + { + // this will ensure that this task is redone when the versions change. + inputs.property "version", project.version + inputs.property "mcversion", project.minecraft.version - // replace stuff in mcmod.info, nothing else - from(sourceSets.main.resources.srcDirs) { - include 'mcmod.info' - - // replace version and mcversion - expand 'version':project.version, 'mcversion':project.minecraft.version - } - - // copy everything else, thats not the mcmod.info - from(sourceSets.main.resources.srcDirs) { - exclude 'mcmod.info' - } -} + // replace stuff in mcmod.info, nothing else + from(sourceSets.main.resources.srcDirs) { + include 'mcmod.info' -tasks.withType(JavaCompile) { - options.encoding = 'UTF-8' -} + // replace version and mcversion + expand 'version':project.version, 'mcversion':project.minecraft.version + } -jar { - configurations.shade.each { dep -> - from(project.zipTree(dep)) { - exclude 'META-INF', 'META-INF/**' + // copy everything else, thats not the mcmod.info + from(sourceSets.main.resources.srcDirs) { + exclude 'mcmod.info' + } } - } -} -sourceSets {main { output.resourcesDir = output.classesDir }} +sourceSets {main { output.resourcesDir = output.classesDir }} \ No newline at end of file diff --git a/src/main/java/foxz/command/CmdCompressor.java b/src/main/java/foxz/command/CmdCompressor.java deleted file mode 100644 index eb3cc3bcd..000000000 --- a/src/main/java/foxz/command/CmdCompressor.java +++ /dev/null @@ -1,187 +0,0 @@ -package foxz.command; - -import foxz.commandhelper.ChMcLogger; -import foxz.commandhelper.annotations.Command; -import foxz.commandhelper.annotations.SubCommand; -import foxz.commandhelper.permissions.OpOnly; -import luizotavio.compressor.ZstdCompressor; -import net.minecraft.nbt.NBTTagCompound; -import noppes.npcs.controllers.PlayerDataController; -import noppes.npcs.util.NBTJsonUtil; - -import java.io.File; -import java.io.RandomAccessFile; -import java.nio.file.Files; -import java.nio.file.StandardOpenOption; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; - -import static luizotavio.compressor.executor.IOExecutor.IO_EXECUTOR; - -@Command( - name = "compressor", - desc = "Convert a file to a compressed file or back to json", - usage = "update [file|all] [json|zstd]" -) -public class CmdCompressor extends ChMcLogger { - - public CmdCompressor(Object sender) { - super(sender); - } - - @SubCommand( - name = "update", - desc = "Convert all files in the current directory to compressed files", - permissions = {OpOnly.class} - ) - public boolean onConvert(String[] args) throws ExecutionException, InterruptedException, TimeoutException { - if (args.length == 0) { - sendmessage("Usage: /noppes compressor update [|all] [json|zstd]"); - return true; - } - if (args.length == 1) { - sendmessage("Please specify the type of compression to use"); - return true; - } - - String type; - - if (args[1].equalsIgnoreCase("json")) { - type = "json"; - } else if (args[1].equalsIgnoreCase("zstd")) { - type = "zstd"; - } else { - sendmessage("Please specify the type of compression to use"); - return true; - } - - File directory = PlayerDataController.instance.getSaveDir(); - - if (args[0].equalsIgnoreCase("all")) { - sendmessage("Converting all files in the current directory to " + type + " files"); - - for (File file : directory.listFiles()) { - if (file.isDirectory()) { - continue; - } - - if (file.getName().endsWith(".json") && type.equalsIgnoreCase("zstd")) { - submit(() -> { - try { - NBTTagCompound compound = NBTJsonUtil.LoadFile(file); - - File compressed = new File(file.getParentFile(), file.getName().replace(".json", ".zstd")); - - byte[] bytes = ZstdCompressor.writeCompound(compound); - - Files.write( - compressed.toPath(), - bytes, - StandardOpenOption.CREATE, - StandardOpenOption.WRITE - ); - } catch (Exception exception) { - exception.printStackTrace(); - } - }); - } - - if (file.getName().endsWith(".zstd") && type.equalsIgnoreCase("json")) { - submit(() -> { - try { - NBTTagCompound compound = ZstdCompressor.readCompressCompound( - new RandomAccessFile(file, "r") - ); - - File compressed = new File(file.getParentFile(), file.getName().replace(".zstd", ".json")); - - NBTJsonUtil.SaveFile(compressed, compound); - } catch (Exception e) { - e.printStackTrace(); - } - }); - } - } - - sendmessage("Done! All files were converted."); - } else { - File file = new File(directory, args[0] + ".json"); - - if (!file.exists()) { - file = new File(directory, args[0] + ".zstd"); - } - - if (!file.exists()) { - sendmessage("File not found"); - return true; - } - - File finalFile = file; - - if (file.getName().endsWith(".json")) { - if (type.equalsIgnoreCase("json")) { - sendmessage("File is already in json format"); - return true; - } - - submit(() -> { - try { - NBTTagCompound compound = NBTJsonUtil.LoadFile(finalFile); - - File compressed = new File(finalFile.getParentFile(), finalFile.getName().replace(".json", ".zstd")); - - byte[] bytes = ZstdCompressor.writeCompound(compound); - - Files.write( - compressed.toPath(), - bytes, - StandardOpenOption.CREATE, - StandardOpenOption.WRITE - ); - - sendmessage("File compressed to zstd!"); - } catch (Exception exception) { - exception.printStackTrace(); - } - }); - } - - if (file.getName().endsWith(".zstd")) { - if (type.equalsIgnoreCase("zstd")) { - sendmessage("File is already in zstd format"); - return true; - } - - submit(() -> { - try { - NBTTagCompound compound = ZstdCompressor.readCompressCompound( - new RandomAccessFile(finalFile, "r") - ); - - if (compound == null) { - return; - } - - File compressed = new File(finalFile.getParentFile(), finalFile.getName().replace(".zstd", ".json")); - - NBTJsonUtil.SaveFile(compressed, compound); - - sendmessage("File converted to json!"); - } catch (Exception e) { - e.printStackTrace(); - } - }); - } - } - - return true; - } - - private void submit(Runnable runnable) throws ExecutionException, InterruptedException, TimeoutException { - CompletableFuture.runAsync(runnable, IO_EXECUTOR).get(5, TimeUnit.MINUTES); - } - - -} diff --git a/src/main/java/foxz/command/CmdNoppes.java b/src/main/java/foxz/command/CmdNoppes.java index 7ba24b61e..9e95fe665 100644 --- a/src/main/java/foxz/command/CmdNoppes.java +++ b/src/main/java/foxz/command/CmdNoppes.java @@ -37,7 +37,7 @@ import foxz.commandhelper.permissions.PlayerOnly; @Command( name = "noppes", desc = "noppes root command", - sub = {CmdClone.class, CmdScript.class, CmdQuest.class, CmdDialog.class, CmdConfig.class, CmdCompressor.class} + sub = {CmdClone.class, CmdScript.class, CmdQuest.class, CmdDialog.class, CmdConfig.class} ) public class CmdNoppes extends ChMcLogger { diff --git a/src/main/java/luizotavio/compressor/ZstdCompressor.java b/src/main/java/luizotavio/compressor/ZstdCompressor.java deleted file mode 100644 index eb750d239..000000000 --- a/src/main/java/luizotavio/compressor/ZstdCompressor.java +++ /dev/null @@ -1,61 +0,0 @@ -package luizotavio.compressor; - -import com.github.luben.zstd.Zstd; -import net.minecraft.nbt.CompressedStreamTools; -import net.minecraft.nbt.NBTSizeTracker; -import net.minecraft.nbt.NBTTagCompound; - -import java.io.*; - -public class ZstdCompressor { - - public static byte[] readCompressed(DataInput inputStream) throws IOException { - int compressedLength = inputStream.readInt(); - int uncompressedLength = inputStream.readInt(); - - if (compressedLength < 0 || uncompressedLength < 0) { - throw new IllegalArgumentException("Invalid length"); - } - - byte[] compressed = new byte[compressedLength]; - - inputStream.readFully(compressed); - - return Zstd.decompress(compressed, uncompressedLength); - } - - public static NBTTagCompound readCompressCompound(DataInput inputStream) throws IOException { - NBTTagCompound compound; - - byte[] compressed = readCompressed(inputStream); - - try (DataInputStream dataInputStream = new DataInputStream(new ByteArrayInputStream(compressed))) { - compound = CompressedStreamTools.func_152456_a(dataInputStream, NBTSizeTracker.field_152451_a); - } - - return compound; - } - - public static byte[] writeCompound(NBTTagCompound compound) throws IOException { - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(), - copy = new ByteArrayOutputStream(); - - try (DataOutputStream dataOutputStream = new DataOutputStream(outputStream)) { - CompressedStreamTools.write(compound, dataOutputStream); - } - - byte[] uncompressed = outputStream.toByteArray(); - - byte[] compress = Zstd.compress(uncompressed); - - try (DataOutputStream dataOutputStream = new DataOutputStream(copy)) { - dataOutputStream.writeInt(compress.length); - dataOutputStream.writeInt(uncompressed.length); - - dataOutputStream.write(compress); - - return copy.toByteArray(); - } - } - -} diff --git a/src/main/java/luizotavio/compressor/executor/IOExecutor.java b/src/main/java/luizotavio/compressor/executor/IOExecutor.java deleted file mode 100644 index 48e1493cb..000000000 --- a/src/main/java/luizotavio/compressor/executor/IOExecutor.java +++ /dev/null @@ -1,16 +0,0 @@ -package luizotavio.compressor.executor; - -import java.util.concurrent.ExecutorService; - -public class IOExecutor { - - /** - * Please, do not change this value unless you know what you are doing. - * This value is used to define the number of threads that will be used to - * compress the files. - * - * If you want to change this value, please, do it with care. - */ - public static ExecutorService IO_EXECUTOR; - -} diff --git a/src/main/java/noppes/npcs/CustomNpcs.java b/src/main/java/noppes/npcs/CustomNpcs.java index 123061a84..604b22b31 100644 --- a/src/main/java/noppes/npcs/CustomNpcs.java +++ b/src/main/java/noppes/npcs/CustomNpcs.java @@ -10,7 +10,6 @@ import cpw.mods.fml.common.network.FMLEventChannel; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.EntityRegistry; import foxz.command.CommandNoppes; -import luizotavio.compressor.executor.IOExecutor; import net.minecraft.block.Block; import net.minecraft.block.BlockIce; import net.minecraft.block.BlockLeavesBase; @@ -31,7 +30,6 @@ import noppes.npcs.entity.old.*; import noppes.npcs.scripted.wrapper.WrapperNpcAPI; import java.io.File; import java.util.Set; -import java.util.concurrent.Executors; @Mod(modid = "customnpcs", name = "CustomNpcs", version = "1.6-beta") public class CustomNpcs { @@ -41,12 +39,6 @@ public class CustomNpcs { private static int NewEntityStartId = 0; - @ConfigProp(info = "*BACKUP BEFORE CHANGING* File Type used with PlayerData. Converting files may reduce lag. To convert existing files: /noppes compressor update [|all] [json|zstd]") - public static String CompressorType = "json"; - - @ConfigProp(info = "The size of IO executors used for compression and decompression. This is the number of threads used for compression and decompression. If you are experiencing issues with the server lagging/crashing, try changing this to a higher number.") - public static int CompressorThreads = 2; - @ConfigProp(info = "Enables/Disables ALL scripting. You can still see and write code in the scripter, but these scripts won't run. True by default") public static boolean ScriptingEnabled = true; @@ -217,13 +209,6 @@ public class CustomNpcs { registerNpc(EntityNPCGolem.class, "npcGolem"); registerNpc(EntityCustomNpc.class, "CustomNpc"); - IOExecutor.IO_EXECUTOR = Executors.newFixedThreadPool( - CompressorThreads, - new ThreadFactoryBuilder() - .setNameFormat("CustomNpcs-IO-%d") - .build() - ); - registerNewEntity(EntityChairMount.class, "CustomNpcChairMount", 64, 10, false); registerNewEntity(EntityProjectile.class, "throwableitem", 64, 3, true); registerNewEntity(EntityMagicProjectile.class, "magicprojectile", 64, 3, true); diff --git a/src/main/java/noppes/npcs/controllers/PlayerData.java b/src/main/java/noppes/npcs/controllers/PlayerData.java index 28b018239..48588315e 100644 --- a/src/main/java/noppes/npcs/controllers/PlayerData.java +++ b/src/main/java/noppes/npcs/controllers/PlayerData.java @@ -4,13 +4,11 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumFacing; import net.minecraft.world.World; import net.minecraftforge.common.IExtendedEntityProperties; import noppes.npcs.CustomNpcs; import noppes.npcs.LogWriter; import noppes.npcs.constants.EnumRoleType; -import noppes.npcs.controllers.data.PlayerDataScript; import noppes.npcs.entity.EntityCustomNpc; import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.entity.data.DataTimers; diff --git a/src/main/java/noppes/npcs/controllers/PlayerDataController.java b/src/main/java/noppes/npcs/controllers/PlayerDataController.java index 5b6df4490..621de7d7d 100644 --- a/src/main/java/noppes/npcs/controllers/PlayerDataController.java +++ b/src/main/java/noppes/npcs/controllers/PlayerDataController.java @@ -1,27 +1,24 @@ package noppes.npcs.controllers; -import luizotavio.compressor.ZstdCompressor; +import java.io.EOFException; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.CompressedStreamTools; -import net.minecraft.nbt.NBTSizeTracker; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.server.MinecraftServer; import noppes.npcs.CustomNpcs; import noppes.npcs.LogWriter; -import noppes.npcs.util.JsonException; import noppes.npcs.util.NBTJsonUtil; -import java.io.*; -import java.nio.file.Files; -import java.nio.file.StandardOpenOption; -import java.util.HashMap; -import java.util.Map; - -import static luizotavio.compressor.executor.IOExecutor.IO_EXECUTOR; - -public class PlayerDataController { +public class PlayerDataController { public static PlayerDataController instance; - + public PlayerDataController(){ instance = this; } @@ -45,24 +42,24 @@ public class PlayerDataController { filename = "noplayername"; filename += ".dat"; try { - File file = new File(saveDir, filename); - if(file.exists()){ - NBTTagCompound comp = CompressedStreamTools.readCompressed(new FileInputStream(file)); - file.delete(); - file = new File(saveDir, filename+"_old"); - if(file.exists()) - file.delete(); - return comp; - } + File file = new File(saveDir, filename); + if(file.exists()){ + NBTTagCompound comp = CompressedStreamTools.readCompressed(new FileInputStream(file)); + file.delete(); + file = new File(saveDir, filename+"_old"); + if(file.exists()) + file.delete(); + return comp; + } } catch (Exception e) { LogWriter.except(e); } try { - File file = new File(saveDir, filename+"_old"); - if(file.exists()){ - return CompressedStreamTools.readCompressed(new FileInputStream(file)); - } - + File file = new File(saveDir, filename+"_old"); + if(file.exists()){ + return CompressedStreamTools.readCompressed(new FileInputStream(file)); + } + } catch (Exception e) { LogWriter.except(e); } @@ -73,52 +70,38 @@ public class PlayerDataController { public NBTTagCompound loadPlayerData(String player){ File saveDir = getSaveDir(); String filename = player; - if(filename.isEmpty()) { - return new NBTTagCompound(); - } - - if(CustomNpcs.CompressorType.equalsIgnoreCase("zstd")) { - filename += ".zstd"; - } else { - filename += ".json"; - } - + if(filename.isEmpty()) + filename = "noplayername"; + filename += ".json"; try { - return ensureCompressor( - new File(saveDir, filename) - ); + File file = new File(saveDir, filename); + if(file.exists()){ + return NBTJsonUtil.LoadFile(file); + } } catch (Exception e) { LogWriter.error("Error loading: " + filename, e); } return new NBTTagCompound(); } - + public void savePlayerData(PlayerData data){ NBTTagCompound compound = data.getNBT(); - String filename; - - if (CustomNpcs.CompressorType.equalsIgnoreCase("zstd")) { - filename = data.uuid + ".zstd"; - } else { - filename = data.uuid + ".json"; - } - + String filename = data.uuid + ".json"; try { File saveDir = getSaveDir(); - - File file = new File(saveDir, filename); - - if (file.exists()) { - file.delete(); + File file = new File(saveDir, filename+"_new"); + File file1 = new File(saveDir, filename); + NBTJsonUtil.SaveFile(file, compound); + if(file1.exists()){ + file1.delete(); } - - writeCompressor(file, compound); + file.renameTo(file1); } catch (Exception e) { LogWriter.except(e); } } - + public PlayerBankData getBankData(EntityPlayer player, int bankId) { Bank bank = BankController.getInstance().getBank(bankId); PlayerBankData data = getPlayerData(player).bankData; @@ -127,7 +110,7 @@ public class PlayerDataController { } return data; } - + public PlayerData getPlayerData(EntityPlayer player){ PlayerData data = (PlayerData) player.getExtendedProperties("CustomNpcsData"); if(data == null){ @@ -139,14 +122,14 @@ public class PlayerDataController { return data; } public String hasPlayer(String username) { - for(String name : getUsernameData().keySet()){ - if(name.equalsIgnoreCase(username)) - return name; - } - + for(String name : getUsernameData().keySet()){ + if(name.equalsIgnoreCase(username)) + return name; + } + return ""; } - + public PlayerData getDataFromUsername(String username){ EntityPlayer player = MinecraftServer.getServer().getConfigurationManager().func_152612_a(username); PlayerData data = null; @@ -162,91 +145,37 @@ public class PlayerDataController { } else data = getPlayerData(player); - + return data; } - + public void addPlayerMessage(String username, PlayerMail mail) { mail.time = System.currentTimeMillis(); - + EntityPlayer player = MinecraftServer.getServer().getConfigurationManager().func_152612_a(username); PlayerData data = getDataFromUsername(username); data.mailData.playermail.add(mail.copy()); savePlayerData(data); } - + public Map getUsernameData(){ Map map = new HashMap(); - for(File file : getSaveDir().listFiles()){ - if(file.isDirectory() || !file.getName().endsWith(".json")) - continue; + for(File file : getSaveDir().listFiles()){ + if(file.isDirectory() || !file.getName().endsWith(".json")) + continue; try { - NBTTagCompound compound = ensureCompressor(file); - - if(compound.hasKey("PlayerName")){ - map.put(compound.getString("PlayerName"), compound); - } + NBTTagCompound compound = NBTJsonUtil.LoadFile(file); + if(compound.hasKey("PlayerName")){ + map.put(compound.getString("PlayerName"), compound); + } } catch (Exception e) { LogWriter.error("Error loading: " + file.getAbsolutePath(), e); } - } + } return map; } - + public boolean hasMail(EntityPlayer player) { return getPlayerData(player).mailData.hasMail(); } - - private void writeCompressor(File file, NBTTagCompound compound) { - if (compound == null) { - throw new IllegalArgumentException("Compound cannot be null!"); - } - - if (CustomNpcs.CompressorType.equalsIgnoreCase("json")) { - IO_EXECUTOR.submit(() -> { - try { - NBTJsonUtil.SaveFile(file, compound); - } catch (IOException | JsonException e) { - e.printStackTrace(); - } - }); - } else if (CustomNpcs.CompressorType.equalsIgnoreCase("zstd")) { - IO_EXECUTOR.submit(() -> { - try { - byte[] compressed = ZstdCompressor.writeCompound(compound); - - Files.write( - file.toPath(), - compressed, - StandardOpenOption.CREATE, - StandardOpenOption.WRITE - ); - } catch (Exception e) { - e.printStackTrace(); - } - }); - } - } - - private NBTTagCompound ensureCompressor(File file) throws JsonException, IOException { - if (!file.exists()) { - return new NBTTagCompound(); - } - - if (CustomNpcs.CompressorType.equalsIgnoreCase("json")) { - return NBTJsonUtil.LoadFile(file); - } - - if (CustomNpcs.CompressorType.equalsIgnoreCase("zstd")) { - byte[] readCompressed = ZstdCompressor.readCompressed( - new RandomAccessFile(file, "r") - ); - - try (DataInputStream dataInputStream = new DataInputStream(new ByteArrayInputStream(readCompressed))) { - return CompressedStreamTools.func_152456_a(dataInputStream, NBTSizeTracker.field_152451_a); - } - } - - throw new IOException("Unknown compressor type: " + CustomNpcs.CompressorType); - } -} +} \ No newline at end of file diff --git a/src/main/resources/assets/customnpcs/textures/cloak/Extras/Mystic.png b/src/main/resources/assets/customnpcs/textures/cloak/Extras/Mystic.png new file mode 100644 index 000000000..ef6b983ba Binary files /dev/null and b/src/main/resources/assets/customnpcs/textures/cloak/Extras/Mystic.png differ