diff --git a/src/main/java/me/luizotavio/compressor/executor/IOExecutor.java b/src/main/java/me/luizotavio/compressor/executor/IOExecutor.java new file mode 100644 index 000000000..f0f5da14e --- /dev/null +++ b/src/main/java/me/luizotavio/compressor/executor/IOExecutor.java @@ -0,0 +1,16 @@ +package me.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 a5aaa037e..75c76c0cf 100644 --- a/src/main/java/noppes/npcs/CustomNpcs.java +++ b/src/main/java/noppes/npcs/CustomNpcs.java @@ -1,8 +1,6 @@ package noppes.npcs; -import java.io.File; -import java.util.Set; - +import com.google.common.util.concurrent.ThreadFactoryBuilder; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; @@ -12,6 +10,7 @@ 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 me.luizotavio.compressor.executor.IOExecutor; import net.minecraft.block.Block; import net.minecraft.block.BlockIce; import net.minecraft.block.BlockLeavesBase; @@ -25,50 +24,30 @@ import net.minecraftforge.common.MinecraftForge; import nikedemos.markovnames.generators.*; import noppes.npcs.config.ConfigLoader; import noppes.npcs.config.ConfigProp; -import noppes.npcs.controllers.BankController; -import noppes.npcs.controllers.ChunkController; -import noppes.npcs.controllers.DialogController; -import noppes.npcs.controllers.FactionController; -import noppes.npcs.controllers.GlobalDataController; -import noppes.npcs.controllers.LinkedNpcController; -import noppes.npcs.controllers.PixelmonHelper; -import noppes.npcs.controllers.PlayerDataController; -import noppes.npcs.controllers.QuestController; -import noppes.npcs.controllers.RecipeController; -import noppes.npcs.controllers.ScriptController; -import noppes.npcs.controllers.ServerCloneController; -import noppes.npcs.controllers.SpawnController; -import noppes.npcs.controllers.TransportController; +import noppes.npcs.controllers.*; import noppes.npcs.enchants.EnchantInterface; import noppes.npcs.entity.*; -import noppes.npcs.entity.old.EntityNPCDwarfFemale; -import noppes.npcs.entity.old.EntityNPCDwarfMale; -import noppes.npcs.entity.old.EntityNPCElfFemale; -import noppes.npcs.entity.old.EntityNPCElfMale; -import noppes.npcs.entity.old.EntityNPCEnderman; -import noppes.npcs.entity.old.EntityNPCFurryFemale; -import noppes.npcs.entity.old.EntityNPCFurryMale; -import noppes.npcs.entity.old.EntityNPCHumanFemale; -import noppes.npcs.entity.old.EntityNPCHumanMale; -import noppes.npcs.entity.old.EntityNPCOrcFemale; -import noppes.npcs.entity.old.EntityNPCOrcMale; -import noppes.npcs.entity.old.EntityNPCVillager; -import noppes.npcs.entity.old.EntityNpcEnderchibi; -import noppes.npcs.entity.old.EntityNpcMonsterFemale; -import noppes.npcs.entity.old.EntityNpcMonsterMale; -import noppes.npcs.entity.old.EntityNpcNagaFemale; -import noppes.npcs.entity.old.EntityNpcNagaMale; -import noppes.npcs.entity.old.EntityNpcSkeleton; +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.5.1-beta") public class CustomNpcs { - @ConfigProp(info = "Disable Chat Bubbles") + @ConfigProp(info = "Disable Chat Bubbles") public static boolean EnableChatBubbles = true; - + private static int NewEntityStartId = 0; - + + @ConfigProp(info = "The type of compressor which is used to compress and decompress player data. If you are experiencing issues with the server lagging/crashing, try changing this to '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 = "Navigation search range for NPCs. Not recommended to increase if you have a slow pc or on a server. Minimum of 16, maximum of 96.") public static int NpcNavRange = 32; @@ -227,14 +206,19 @@ 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); new RecipeController(); - + ForgeChunkManager.setForcedChunkLoadingCallback(this, new ChunkController()); new CustomNpcsPermissions();