diff --git a/build.gradle b/build.gradle index 3dfbb49ae..e7f7753a3 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ plugins { id "dts.typescript-generator" } -version = "1.11.1" +version = "1.11.2" group= "kamkeel.customnpc-plus" archivesBaseName = "CustomNPC-Plus" diff --git a/gradle.properties b/gradle.properties index d0548accd..0cbb657b8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -199,7 +199,7 @@ disableCheckstyle = true # ideaCheckSpotlessOnBuild = true # Non-GTNH properties -modVersion = 1.11.1 +modVersion = 1.11.2 # Increase Gradle's JVM memory usage to avoid daemon expiration due to # insufficient heap space on CI builds. diff --git a/src/main/java/noppes/npcs/CustomNpcs.java b/src/main/java/noppes/npcs/CustomNpcs.java index 68080765a..1b5467aa0 100644 --- a/src/main/java/noppes/npcs/CustomNpcs.java +++ b/src/main/java/noppes/npcs/CustomNpcs.java @@ -11,6 +11,7 @@ import cpw.mods.fml.common.event.FMLServerAboutToStartEvent; import cpw.mods.fml.common.event.FMLServerStartedEvent; import cpw.mods.fml.common.event.FMLServerStartingEvent; import cpw.mods.fml.common.event.FMLServerStoppedEvent; +import cpw.mods.fml.common.event.FMLServerStoppingEvent; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.EntityRegistry; import cpw.mods.fml.relauncher.Side; @@ -49,6 +50,7 @@ import net.minecraft.block.BlockVine; import net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityList; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.server.MinecraftServer; import net.minecraftforge.common.ForgeChunkManager; import net.minecraftforge.common.MinecraftForge; @@ -89,6 +91,7 @@ import noppes.npcs.controllers.ServerTagMapController; import noppes.npcs.controllers.SpawnController; import noppes.npcs.controllers.TagController; import noppes.npcs.controllers.TransportController; +import noppes.npcs.controllers.data.PlayerData; import noppes.npcs.enchants.EnchantInterface; import noppes.npcs.entity.EntityChairMount; import noppes.npcs.entity.EntityCustomNpc; @@ -121,11 +124,12 @@ import noppes.npcs.scripted.NpcAPI; import somehussar.janino.AdvancedClassFilter; import java.io.File; +import java.util.ArrayList; import java.util.HashSet; import java.util.Set; import java.util.function.Consumer; -@Mod(modid = "customnpcs", name = "CustomNPC+", version = "1.11.1") +@Mod(modid = "customnpcs", name = "CustomNPC+", version = "1.11.2") public class CustomNpcs { @SidedProxy(clientSide = "noppes.npcs.client.ClientProxy", serverSide = "noppes.npcs.CommonProxy") @@ -317,7 +321,7 @@ public class CustomNpcs { new AddonManager(); new AttributeController(); new MagicController(); - + SyncController.register(); @@ -426,6 +430,31 @@ public class CustomNpcs { } + @EventHandler + public void stopping(FMLServerStoppingEvent event) { + // Fired while everyone is still connected. Custom effects (and any other + // player data changed since the last save) only live in memory, and the + // logout event is not guaranteed to be delivered during shutdown, so flush + // every online player synchronously here. + MinecraftServer server = MinecraftServer.getServer(); + if (server == null || server.getConfigurationManager() == null) + return; + + for (Object obj : new ArrayList(server.getConfigurationManager().playerEntityList)) { + if (!(obj instanceof EntityPlayer)) + continue; + try { + PlayerData data = PlayerData.get((EntityPlayer) obj); + if (data != null) { + data.flushEffects(); + data.save(true); + } + } catch (Exception e) { + LogWriter.except(e); + } + } + } + @EventHandler public void stopped(FMLServerStoppedEvent event) { ServerCloneController.Instance = null;