package advancedsystemsmanager.helpers; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.network.FMLNetworkEvent; import net.minecraft.world.World; import net.minecraft.world.WorldSavedData; import net.minecraftforge.event.world.WorldEvent; import java.util.ArrayList; import java.util.List; public class WorldSaveHelper { private List<SavableData> savableData = new ArrayList<SavableData>(); private World world; public void save(SavableData data) { if (world != null) { loadData(data); } this.savableData.add(data); } @SubscribeEvent public void onWorldLoad(WorldEvent.Load event) { if (event.world.provider.dimensionId == 0 && !event.world.isRemote) { this.world = event.world; for (SavableData data : savableData) { if (data.needsLoading()) { loadData(data); } } } } @SubscribeEvent public void onWorldUnload(WorldEvent.Unload event) { if (event.world.provider.dimensionId == 0 && !event.world.isRemote) { unload(); } } @SubscribeEvent public void onPlayerQuit(FMLNetworkEvent.ClientDisconnectionFromServerEvent e) { unload(); } private void unload() { world = null; for (SavableData data : savableData) { data.unload(); } } private boolean loadData(SavableData data) { WorldSavedData saved = world.mapStorage.loadData(data.getClass(), data.mapName); world.mapStorage.setData(data.mapName, data); return data.copy(saved); } }